やりたかったこと
物作りがしたくなった。ワクワクしたい、余暇を有効に使いたい、そう思った。動物占いの診断ができるツールだったらすぐに作れそうだ、診断結果でユーザーを検索できるSNSがあったら面白い、そう思って余暇を使って開発を始めてみた。
まだまだver.1のalpha版。自分の診断結果が見られるだけで、フロントは最低限しか作っていない。けれどもサーバー上で公開できたときにはすごく嬉しかった。
そんな中でうまくいかなかったこともあって、同じ状況で困っている人に情報を共有できればと思って、起こった問題と解決した方法を公開してみる。
※環境に依存する部分もあります。やる人自己責任でよろぴく。
$ php artisan -V Laravel Framework 6.13.1
日付のバリデーションがおかしい
1984-02-14のような形式で日付を受け取りたいので、バリデーションをCCYY-MM-DDで設定。しかしエラー。
“The birthday does not match the format CCYY-MM-DD.”
PHPは他の言語と形式が違うらしい。”Y-m-d”と指定したら期待通りの動作。
登場人物
Project/app/Http/Controllers/Auth/RegisterController.php
‘column_name’ doesn’t have a default value
LaravelのAuthでユーザー作成をしようとした。生年月日をデータベースに書き込んだり診断も同時に行ったりしたくてRegisterController.phpをいじったらエラー。
Userクラスのprotected $fillableに値を設定しないといけないらしい。
登場人物
Project/app/User.php
Project/app/Http/Controllers/Auth/RegisterController.php
サニタイジングとオニタイジング
リンクが謎にサニタイジングされる問題で完成間近なのに足止め。こないだ節分でオニタイジングしたからか?
そっか、{{$hoge}}だと強制エスケープだった。{!!$hoge!!}}にしないといけないんだ、と今更になって思い出す。(というかググって気づく)
なお、@inject(‘services’, ‘App\Services\AnimalService’)みたいな感じで「サービス注入」という技があるらしい。
登場人物
Project/resources/views/home/index.blade.php
Project/app/Services/AnimalService.php
coreserverにsshログインできない問題
1。IPアドレス許可の操作をちゃんとやる
2。account@hoge.coreserver.jpの形式。自分とこのドメイン(kfs214.net)じゃダメよ。
3。あれ、おれ$passwdしちゃった??sudoいらないもんな……とか疑ったけれど、コンパネから見えるパスワードで大丈夫だった。コンパネからリセットもできる(FTPパスワードの変更)。
4。謎に次のエラーが出るときあるのだけれど、後回しにして別のことをしていたら次の日とかには繋がることが多いから、問い合わせも何もせず原因もわかっていない。
index.phpの配置と慎吾リックリンクについて
index.phpをドキュメントルート直下に配置。慎吾リックリンクを活用。参照先(元ファイル)を相対パスで書いていて動かなかった。
403エラーだったところが、空白画面は出るようになった。
cloneしたはいいけれどcomposerのインストールで躓いた件
公式のDownload Composerページを参照してインストール。
$ php -r "copy('https://getcomposer.org/installer', 'composer-s etup.php');" Error in argument 1, char 2: option not found r Usage: php [-q] [-h] [-s] [-v] [-i] [-f ] php [args...] -a Run interactively -b | Bind Path for external FASTCGI Server mode -C Do not chdir to the script's directory -c | Look for php.ini file in this directory -n No php.ini file will be used -d foo[=bar] Define INI entry foo with value 'bar' -e Generate extended information for debugger/profiler -f Parse . Implies `-q' -h This help -i PHP information -l Syntax check only (lint) -m Show compiled in modules -q Quiet-mode. Suppress HTTP Header output. -s Display colour syntax highlighted source. -v Version number -w Display source with stripped comments and whitespace. -z Load Zend extension . -T Measure execution time of script repeated times.
どうやらphpcliを使わないといけないらしい。”php”コマンドの代わりに”phpcli”コマンドを使用して公式ページのコマンドをコピペ。(ハッシュとか特に)
$ phpcli -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" $ phpcli -r "if (hash_file('sha384', 'composer-setup.php') === 'c5b9b6d368201a9db6f74e2611495f369991b72d9c8cbd3ffbc63edff210eb73d46ffbfce886 69ad33695ef77dc76976') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" Installer verified $phpcli composer-setup.php All settings correct for using Composer Downloading... Composer (version 1.9.3) successfully installed to: Project/composer.phar Use it: php composer.phar $ phpcli -r "unlink('composer-setup.php');"
からの、プロジェクトのディレクトリに移動してphpcli composer.phar install
$ phpcli composer.phar install Loading composer repositories with package information Installing dependencies (including require-dev) from lock file Your requirements could not be resolved to an installable set of packages. Problem 1 - This package requires php ^7.2 but your PHP version (7.1.33) does not satisfy that requirement. Problem 2 - Installation request for doctrine/lexer 1.2.0 -> satisfiable by doctrine/lexer[1.2.0]. - doctrine/lexer 1.2.0 requires php ^7.2 -> your PHP version (7.1.33) does not satisfy that requirement. Problem 3 - Installation request for laravel/framework v6.13.1 -> satisfiable by laravel/framework[v6.13.1]. - laravel/framework v6.13.1 requires php ^7.2 -> your PHP version (7.1.33) does not satisfy that requirement. Problem 4 - Installation request for laravel/tinker v2.1.0 -> satisfiable by laravel/tinker[v2.1.0]. - laravel/tinker v2.1.0 requires php ^7.2 -> your PHP version (7.1.33) does not satisfy that requirement. Problem 5 - Installation request for monolog/monolog 2.0.2 -> satisfiable by monolog/monolog[2.0.2]. - monolog/monolog 2.0.2 requires php ^7.2 -> your PHP version (7.1.33) does not satisfy that requirement. Problem 6 - Installation request for symfony/css-selector v5.0.4 -> satisfiable by symfony/css-selector[v5.0.4]. - symfony/css-selector v5.0.4 requires php ^7.2.5 -> your PHP version (7.1.33) does not satisfy that requirement. Problem 7 - Installation request for symfony/mime v5.0.4 -> satisfiable by symfony/mime[v5.0.4]. - symfony/mime v5.0.4 requires php ^7.2.5 -> your PHP version (7.1.33) does not satisfy that requirement. Problem 8 - Installation request for symfony/service-contracts v2.0.1 -> satisfiable by symfony/service-contracts[v2.0.1]. - symfony/service-contracts v2.0.1 requires php ^7.2.5 -> your PHP version (7.1.33) does not satisfy that requirement. Problem 9 - Installation request for symfony/translation-contracts v2.0.1 -> satisfiable by symfony/translation-contracts[v2.0.1]. - symfony/translation-contracts v2.0.1 requires php ^7.2.5 -> your PHP version (7.1.33) does not satisfy that requirement. Problem 10 - Installation request for phpunit/php-code-coverage 7.0.10 -> satisfiable by phpunit/php-code-coverage[7.0.10]. - phpunit/php-code-coverage 7.0.10 requires php ^7.2 -> your PHP version (7.1.33) does not satisfy that requirement. Problem 11 - Installation request for phpunit/phpunit 8.5.2 -> satisfiable by phpunit/phpunit[8.5.2]. - phpunit/phpunit 8.5.2 requires php ^7.2 -> your PHP version (7.1.33) does not satisfy that requirement. Problem 12 - Installation request for sebastian/global-state 3.0.0 -> satisfiable by sebastian/global-state[3.0.0]. - sebastian/global-state 3.0.0 requires php ^7.2 -> your PHP version (7.1.33) does not satisfy that requirement. Problem 13 - Installation request for sebastian/type 1.1.3 -> satisfiable by sebastian/type[1.1.3]. - sebastian/type 1.1.3 requires php ^7.2 -> your PHP version (7.1.33) does not satisfy that requirement. Problem 14 - doctrine/lexer 1.2.0 requires php ^7.2 -> your PHP version (7.1.33) does not satisfy that requirement. - egulias/email-validator 2.1.15 requires doctrine/lexer ^1.0.1 -> satisfiable by doctrine/lexer[1.2.0]. - Installation request for egulias/email-validator 2.1.15 -> satisfiable by egulias/email-validator[2.1.15].
PHP7.2以上が必要と言われたので、PHP7.4を使ってみる。
$ php74cli compiser.phar install Loading composer repositories with package information Installing dependencies (including require-dev) from lock file Your requirements could not be resolved to an installable set of packages. Problem 1 - Installation request for phpunit/php-code-coverage 7.0.10 -> satisfiable by phpunit/php-code-coverage[7.0.10]. - phpunit/php-code-coverage 7.0.10 requires ext-xmlwriter * -> the requested PHP extension xmlwriter is missing from your system. Problem 2 - Installation request for phpunit/phpunit 8.5.2 -> satisfiable by phpunit/phpunit[8.5.2]. - phpunit/phpunit 8.5.2 requires ext-xmlwriter * -> the requested PHP extension xmlwriter is missing from your system. Problem 3 - Installation request for theseer/tokenizer 1.1.3 -> satisfiable by theseer/tokenizer[1.1.3]. - theseer/tokenizer 1.1.3 requires ext-xmlwriter * -> the requested PHP extension xmlwriter is missing from your system. To enable extensions, verify that they are enabled in your .ini files: - /usr/local/apache2/conf/php74/php.ini You can also run `php --ini` inside terminal to see which files are used by PHP in CLI mode.
依存関係で問題。”ext-xmlwriter”とやらが必要だそう。
調べたら、coreserverだとPHP 7.1ではext-xmlwriterが使えるけれどPHP 7.4では使えないらしい。
自分でコンパイルして引っ張ってくると使えるみたい。
とりあえずバージョンを揃えた方がいいのかな、とバージョン調べてみた。
$ php74cli -v PHP 7.4.1 (cli) (built: Dec 24 2019 15:09:12) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies with Zend OPcache v7.4.1, Copyright (c), by Zend Technologies
からの、淡々とコンパイル。
$ wget -q https://www.php.net/distributions/php-7.4.1.tar.gz $ tar zxvf php-7.4.1.tar.gz php-7.4.1/ php-7.4.1/buildconf.bat php-7.4.1/azure-pipelines.yml php-7.4.1/README.md php-7.4.1/configure.ac 〜略〜 $ cd php-7.4.1 $ ./configure --enable-xmlwriter=shared checking for grep that handles long lines and -e... /usr/bin/grep checking for egrep... /usr/bin/grep -E checking for a sed that does not truncate output... /usr/bin/sed checking build system type... x86_64-pc-linux-gnu checking host system type... x86_64-pc-linux-gnu checking target system type... x86_64-pc-linux-gnu checking for pkg-config... /usr/bin/pkg-config checking pkg-config is at least version 0.9.0... yes checking for cc... cc checking whether the C compiler works... yes 〜略〜 Thank you for using PHP. $ make /bin/sh Project/php-7.4.1/libtool --silent --preserve-dup-deps --mode=compile cc -Iext/xmlwriter/ -IProject/php-7.4.1/ext/xmlwriter/ -DPHP_ATOM_INC -IProject/php-7.4.1/include -IProject/php-7.4.1/main -IProject/php-7.4.1 -IProject/php-7.4.1/ext/date/lib -I/usr/include/libxml2 -IProject/php-7.4.1/TSRM -IProject/php-7.4.1/Zend -I/usr/include -g -O2 -fvisibility=hidden -Wall -Wno-strict-aliasing -DZEND_SIGNALS -c Project/php-7.4.1/ext/xmlwriter/php_xmlwriter.c -o ext/xmlwriter/php_xmlwriter.lo 〜略〜 Build complete. Don't forget to run 'make test'.
からの、composer installに再挑戦
$ cd .. $ php74cli -d extension=php-7.4.1/modules/xmlwriter.so composer.phar install Loading composer repositories with package information Installing dependencies (including require-dev) from lock file Package operations: 87 installs, 0 updates, 0 removals - Installing doctrine/inflector (1.3.1): Loading from cache - Installing doctrine/lexer (1.2.0): Loading from cache 〜略〜 Package manifest generated successfully.
いよいよmigrateしてみる。
$ php74cli artisan migrate ************************************** * Application In Production! * ************************************** Do you really wish to run this command? (yes/no) [no]: > yes Illuminate\Database\QueryException : SQLSTATE[HY000] [2002] No such file or directory (SQL: select * from information_schema.tables where table_schema = K300 and table_name = migrations and table_type = 'BASE TABLE')
migrateできない問題
コンパネからDB作成。
Project/config/database.phpの設定がMAMP用のままだったので”unix_socket”の部分をコメントアウト。
最後に.envの設定も更新。ちゃんと表示された。
画像が表示できない
画像のアップロードはちゃんとできているようだ。
そうだ、index.phpだけシンボリックリンクを作って対応したのだった。(root権限ないレンタルサーバーにありがちなこと)
画像ディレクトリへのシンボリックリンクも作成して、無事に解決。
画像ディレクトリそのものにアクセスしようとすると403。いいね。
Great content! Super high-quality! Keep it up! 🙂
Thanks!
活動的なコアラ、私ですね〜笑
まさかの、誕生日を秘密にしたいがために入力した偽生年月日で出たホワイトエンジェルがTSRさんだった笑
実際には「△3」なんで。ゾウですらない。