PHPでAPIを作ったんだけれど
処理時間が60秒経過したところで
HTTPステータスコードが504で返ってきてしまって
エラーログを確認したところ、下記のメッセージが
(70007)The timeout specified has expired:~
httpd.conf に下記の1行を追加したら解決した
デフォルト(記述がない)と60秒みたい
Timeout 120
PHPでAPIを作ったんだけれど
処理時間が60秒経過したところで
HTTPステータスコードが504で返ってきてしまって
エラーログを確認したところ、下記のメッセージが
(70007)The timeout specified has expired:~
httpd.conf に下記の1行を追加したら解決した
デフォルト(記述がない)と60秒みたい
Timeout 120
DB::raw を使えばいけるんだろうけど
こんな感じでもいけるようなのでメモメモ
1 2 3 4 |
$unique = DB::table("table") ->distinct('column') ->count('column'); |
PHPで日付の差を比較するのは簡単にできるのでメモメモ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
// 現在時刻 $dateNow = new DateTime(); // 時、分を0にする $dateNow->setTime(0, 0); // 比較する時間 $dateTo = new DateTime('2020-10-10'); // 比較 $diff = $dateNow->diff($dateTo); if ($diff->invert == 1) { // もし$dateNowのほうが未来だった場合 $sa = "ehe"; } else { if($diff->y > 0) { $sa = "{$diff->y}年{$diff->m}ヶ月"; } else if($diff->m > 0) { $sa = "{$diff->m}ヶ月"; } else { $sa = "{$diff->d}日"; } } |
Laravelのblade内で、DataTablesを使ってたんだけど
td の中にプルダウンを設置したくて、
どうにかできないかと
もっとよい方法がありそうだけど
とりあえずこれでしのいだ
1 2 3 4 5 6 7 8 |
{ 'data' : 'test', render: function(data, type, row) { let tag = '{{ Form::select('test[]', $testSelectList, null, ['class'=>'form-control']) }}'; tag = tag.replace('value="'+data+'"', 'value="'+data+'" selected="selected"'); return tag; } }, |
Laravel で ajax の POST通信をしようとしたところ
エラーとなったのでその対処方法をメモメモ
HTMLのどっかにmetaタグでcsrf-tokenの文字列を記載。
1 |
<meta name="csrf-token" content="{{ csrf_token() }}"> |
あとは、ajaxのところで、headerにこの値を
セットすればOK!!
1 2 3 4 5 6 |
$.ajax({ 'type': 'POST', 'dataType': 'json', headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') }, |
ついでに時間がたったら更新しておく
1 2 3 4 5 6 |
setInterval(refreshToken, 3600000); //1 hour function refreshToken(){ $.get('refresh-csrf').done(function(data){ $('meta[name="csrf-token"]').attr('content',data); }); } |
Laravel使ってて
.envファイルとか更新したのに
反映されなかったりするのは
すべてキャッシュのせいだー!
コマンドラインで
これをたたけば解決なり!
1 2 3 4 |
php artisan cache:clear php artisan config:clear php artisan route:clear php artisan view:clear |
Console\Comands でバッチプログラムを作成したときに
パラメータを渡す方法をメモメモ
2つあって
1 2 3 4 5 6 7 8 9 10 |
// こんな感じにすると protected $signature = 'test:hoge {--hogehoge=}'; public function handle() { // こんな感じで受け取れる $hogehoge = $this->option("hogehoge"); // 実行するときはこんな感じ php artisan test:hoge --hogehoge=1 |
もうひとつは
1 2 3 4 5 6 7 8 9 10 |
// こんな感じにすると protected $signature = 'test:hoge {hogehoge?}'; public function handle() { // こんな感じで受け取れる $hogehoge = $this->argument("hogehoge"); // 実行するときはこんな感じ php artisan test:hoge 1 |
両方ともパラメータなしでも実行できる
基本だけど一応メモメモ
・composer require
パッケージを追加するときに使用
composer.json も更新される
開発環境で実行
・composer update
composer.json に記載されているパッケージを最新バージョンにアップデート
composer.lock も更新される
開発環境で実行
・composer install
composer.json に記載されているパッケージを、
composer.lock に記載されているバージョンでインストール
composer.json とcomposer.lock さえあれば
どこの環境でも同じパッケージが入れられる
すばらしいw
なんとなくやる機会があったので
いちおう忘れないようにメモメモ
まずは composer で phpmailer をインストール
1 |
composer require phpmailer/phpmailer |
https://github.com/PHPMailer/PHPMailer
あとはこんな感じ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
use PHPMailer\PHPMailer\PHPMailer; $mail = new PHPMailer(true); $host = 'smtp.gmail.com'; $userName = 'xxx@gmail.com'; $password = 'xxxxx'; $from = 'xxxxxx'; $fromname = 'xxxxx'; $to = 'xxxxxxxxx'; $subject = '件名'; $body = '本文'; $mail->SMTPDebug = 2; $mail->isSMTP(); $mail->SMTPAuth = true; $mail->Host = $host; $mail->Username = $userName; $mail->Password = $password; $mail->SMTPSecure = 'tls'; $mail->Port = 587; $mail->CharSet = "utf-8"; $mail->Encoding = "base64"; $mail->setFrom($from, $fromname); $mail->addAddress($to); $mail->Subject = $subject; $mail->Body = $body; $mail->send(); |
Laravelで、mysqlにCSVファイルをインポートしようとしたら
エラーになったので、そのときの対応をメモメモ
CSVの読み込みはこんな感じ
1 |
DB::statement('LOAD DATA LOCAL INFILE "/tmp/sample.csv" INTO TABLE sampleTable FIELDS TERMINATED BY \',\' OPTIONALLY ENCLOSED BY \'"\''); |
そうすると
こんなエラーや
string(420) “SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll(). Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute.
こんなエラーで怒られる、、、
PDO::exec(): LOAD DATA LOCAL INFILE forbidden
コンソール画面から直接SQLを実行するといけるのに
config/database.php に
下記2行を追加してあげたらうまくいった
PDO::ATTR_EMULATE_PREPARES => true,
PDO::MYSQL_ATTR_LOCAL_INFILE => true,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
'mysql' => [ 'driver' => 'mysql', 'url' => env('DATABASE_URL'), 'host' => env('DB_HOST', 'xxx.xxx.xxx.xxx'), 'port' => env('DB_PORT', '3306'), 'database' => env('DB_DATABASE', 'xxxxx'), 'username' => env('DB_USERNAME', 'xxxxx'), 'password' => env('DB_PASSWORD', 'xxxxx'), 'unix_socket' => env('DB_SOCKET', ''), 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'prefix_indexes' => true, 'strict' => true, 'engine' => null, 'options' => extension_loaded('pdo_mysql') ? array_filter([ PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), PDO::ATTR_EMULATE_PREPARES => true, PDO::MYSQL_ATTR_LOCAL_INFILE => true, ]) : [], ], |