GattsCOM

ブログ

BLOG

  1. Home
  2. Blog
  3. #PHP

Ajax LaravelやPHPでファイル保存する時Base64とかでよく忘れちゃうこと

こんちわ〜久しぶりにプログラム書いてると、久しぶりじゃなくてもよく忘れちゃうbase64の保存方法Ajaxで非同期通信してて、Laravel側(PHP)にファイルデータ渡して保存してるけど、保存したファイルが開けません問題Storage::put('ファイル名', $data);// PHPプレーンに書くならfile_put_contents('ファイル名', base64_decode($data));作ったファイルをダウンロードして、見てみるとファイルは開けません!って怒られるあれれ?って思ってあ〜そうだった。base64_decodeしてねぇや。Storage::put('ファイル名', base64_decode($data));// PHPプレーンに書くならfile_put_contents('ファイル名', base64_decode($data));ダウンロードして・・・ファイルは開けまてん!!あれぇぇえぇ〜?ってなること良くあるある。送信したファイルについてる下の呪文を取り除くのよく忘れる。data:application/pdf;base64,data:image/png;base64,ってことで、よく忘れるのはこのファイルの先頭についてる呪文を削除してからbase64_decodeして保存しないとダメってことですよね。ちゅーことで〜今回はPDFとして〜$str_rep = 'data:application/pdf;base64,';$data = base64_decode(str_replace($str_rep, '', $image_data));Storage::put($file_name.'.pdf', $data);ふぅ〜無事ダウンロードして開けました。まじで、久々に書いてたら忘れること多いなぁ・・・・

LaravelでQRコードを生成、作成する

久しぶりの投稿です(汗今日はLaravelで、QRコードを生成する方法を書いていこうと思います!!・Laravel5.7・PHP7.4凄く簡単なので、サクッと行ってみよう!!まずは、Laravelのルートへ行き、Composer追加しますcomposer require simplesoftwareio/simple-qrcodeもし、上の設定でサーバー側のメモリが足りない!とかってエラー出た方は「エラーPHP Fatal error:  Allowed memory size of {メモリの数値} bytes exhausted」下記を試して見てください!COMPOSER_MEMORY_LIMIT=-1 composer require simplesoftwareio/simple-qrcode上のコマンドは、一時的にメモリのリミットを外すやり方です。Composerが終わったらapp/config.phpの中を書き換え//app/config.php//providers配列に下記を追加'providers' => [ SimpleSoftwareIO\QrCode\QrCodeServiceProvider::class,],//aliases配列にも下記を追加'aliases' => [ 'QrCode' => SimpleSoftwareIO\QrCode\Facades\QrCode::class,]設定が完了したら、Controllerに「use QrCode」を追加してください。あとは、bladeなどに下記のように書けばQRコードを生成してくれますよ!{{QrCode::size(100)->generate('https://home.gattscom.com')}}//のように書けばQRコードが出てくると思いますもし、なんかエラー出る人は、Laravelルートの「Bootstrap」ディレクトリの権限を変更してみると良いかも知れません!すごく簡単なので、試して見てくださいね!自分の備忘録も兼ねて・・・w

PHPを5.3から5.4にアップデートしたらMySQLが接続できなくなった時の対処

Laravelフレームワークを使用しようと、古いサーバーに開発環境入れようと思いPHPのバージョンを調べたらPHP5.3.3だった。Laravel4.2を入れようと思ったら、PHP5.4以上だったのでPHPのバージョンをアップデートした。その際に、MySQLもアップデートされてMySQL5.1.73から5.5.62になった。ここで、PHPは問題なく動いてたけどMySQLで接続エラーが出ていて結構ハマっちゃいまいた。Can't connect to local MySQL server through socket '/tmp/mysql.sock'(2)↑のエラーが出ていたので、グーグル先生に聞いてみたらmysql.sockがないよと言われる/var/lib/mysqlの中を確認するmysql.sockが確かに無い。ということで、mysql.sockをとりあえず作る。touch mysql.sockls -lamysql.sockが出来たので、再度確認するCan't connect to local MySQL server through socket '/tmp/mysql.sock'(111)お?次は()の中が2 → 111になったぞ?調べてみると、ソケットエラーらしい。パーミッションを見て変更してみる。chmod 777 mysql.sock再度試したけど接続エラーが消えない(111のまま)うーん・・・・・エラーを見てみようvi /var/log/mysqld.log[ERROR] /usr/libexec/mysqld: unknown variable 'default-character-set=utf8'お、なんかエラー上がってるやんちょっと調べてみるとMySQLのアップデートしたバージョンで'default-character-set=utf8'は使えないよ!って怒られてるらしいそれじゃなくて、character-set-server=utf8を使ってね!ってどこかに書いてました。my.cnfの設定を変更する//my.cnf#default-character-set=utf8 ← コメントアウトcharacter-set-server=utf8 ← 追加保存して、mysqlサーバーをリスタートしたら、無事に起動してくれました。ハマって3時間も悩んでしまった・・・勿体無いT_T

空の配列を取り除く?~「array_filter」と「array_values」を組み合わせる~

こんにちわ!プログラマーのどっぴーです^^現在開発中のツールで、簡単に導入できて感動した!関数をご紹介します。今回使ったphpの関数は、「array_filter」「array_values」です。テキストエリアの入力値を取得し、改行ごとに配列に分ける、という処理を組んでいる時のこと。空白行があった場合に後の処理で不具合が起こることに気が付きました。以前に学習した「配列の中身が空の部分を削除するarray_filter」を使えば、たった1行のコードで不要箇所を削除できるのでは?と考えいざ実験。検証のため、テキストエリア内の3行目に、なにも入力をせずに改行している箇所を用意しました。//テキストエリアの入力値//1行目:AAA//2行目:BBB//3行目://4行目:CCC//改行区切りで配列化$str_array = explode("\n", $textarea);//配列の中身//$str_array[0]=>AAA//$str_array[1]=>BBB//$str_array[2]=>//$str_array[3]=>CCC「array_filter」を適用し、$new_arrayの中に格納します。$new_array = array_filter($str_array);//関数適用後の中身↓↓//$new_array[0]=>AAA//$new_array[1]=>BBB//$new_array[3]=>CCC不要な空項目は消えてくれましたが、配列のキーが連番になっていません。今回開発中のツールでは配列のキーを取り出して処理をする必要がありました。キーの再割り振りが可能なのか調べたところ、「array_values」の関数を発見しました。$new_array = array_values(array_filter($str_array));//関数適用後の中身↓↓//$new_array[0]=>AAA//$new_array[1]=>BBB//$new_array[2]=>CCCarray_valuesは「配列の値をすべて取り出す」という処理を行なっているんだとか。既存のキーを無視して、データの数だけ数字キーを振り直すそうです。連想配列の場合、(文字列の)キーはどうなるのか検証。//連想配列の場合のテスト$str_array = array('test1'=>'AAA', 'test2'=>'BBB', 'test3'=>'', 'test4'=>'CCC');$new_array = array_values(array_filter($str_array));//関数適用後の中身↓↓//$new_array[0]=>AAA//$new_array[1]=>BBB//$new_array[2]=>CCCもともと設定していたキーを無視して「0」から振り直しが行われました。なるほどなー。改行区切りのデータの取り扱いって、何かしら使う機会があると思います。今回紹介した2つの関数を使えば、エラーを出さずにスルーできるので、ユーザビリティ向上にも繋がります!ぜひ導入してみましょう。入力の際に「データが不正です!」みたいなバリデーションエラーを出すと、使う側からすると煩わしいですしね。ではまた~(;´∀`)ノ

Laravel クエリビルダ インクリメント処理

記事をもっと見る