GattsCOM

ブログ

BLOG

  1. Home
  2. Blog
  3. #laravel

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);ふぅ〜無事ダウンロードして開けました。まじで、久々に書いてたら忘れること多いなぁ・・・・

CentOS Stream9 LAMP構築から色々含めて

こんにちわ!今日は2月8日にリリースされたLaravel9を使おうと思ってついでに新しいOSも導入しようと思ったのでここに書く内容をほぼほぼコピペで動くだろう!って感じで書いていこうと思います〜本ブログでは、Composer、npm、certbot(let's encrypt)なども含めてご紹介します。【構成】CentOS Stream9 (さくらVPS)Apache:2.4PHP:8.0MySQL:8.0Laravel:9.1Composer:2.2.6npm:8.3python:3.9 (Let's Encrypt Certbot用)今回やりたいLarave9は必須条件がPHP8以上でしたので、どうせならと思いOSも最新の物にしようと考えました。さくらVPSのコンパネから、OSをCentOS Stream9を選択してサクッとインスールします。インストールが終わったら、sshで接続します。この時、OSを入れる際に注意書きでrootユーザーではなくcentosってユーザーが自動で作られます。rootユーザーでは直接接続ができなくなります。(あとで設定で変更できますが、それは別のお話しで)あ、それからCentOS7などまで使われてたyumコマンドが変更されてdnfとなっているので、そこも見慣れないと思いますが気にせず進めて行きましょう!# EPELの追加dnf config-manager --set-enabled crbdnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm# Remiの追加dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpmdnf config-manager --set-enabled remisshでログインの際に、変な文章出てくるのでcockpitは削除しておきましょう。## 不要なサービスの停止・削除# cockpitの削除dnf remove -y cockpit続けてFirewalldを起動させて、ポートを開放しましょう## Firewallの設定# Firewallをスタートさせるsystemctl start firewalld# 使わないサービスのポートを閉じる(cockpitとdhcpv6-client)firewall-cmd --remove-service=cockpit --permanentfirewall-cmd --remove-service=dhcpv6-client --permanent# HTTP(80/tcp) と HTTPS(443/tcp) を許可しておきますfirewall-cmd --add-port=80/tcp --permanentfirewall-cmd --add-port=443/tcp --permanentFirewalldを再起動して、設定が反映されているか確認しましょう# firewall 再起動firewall-cmd --reload# Firewallの確認firewall-cmd --list-all続けてApacheのインストールです!## Apacheインストールdnf -y install httpd-develdnf -y install mod_sslインストールされたか確認しましょう。# インストールされたかバージョン確認httpd -vバージョンが表示されてればOKです!\(^o^)自動起動をONにしましょう!# Apacheを自動起動設定systemctl enable httpd続いて、PHPをインストールしましょう! (8.0.13) 複数ライブラリもまとめてインストール# PHPのインストールdnf install php php-common php-opcache php-cli php-gd php-curl php-mysqlnd php-devel php-fpm php-mbstring php-pdo php-intl php-xml php-pear php-pecl-apcu php-soap php-zipインストールされたかバージョン確認してみましょう!# バージョン確認 (表示されればOK)php -v表示されてればOKですよ!おめでとうございます続いては、MySQLのインストールです# MySQLのインストール (8.0)dnf -y install mysqldnf -y install mysql-serverインストールされてるかバージョンの確認# バージョン確認 (表示されればOK)mysqld --versionバージョンが表示されてればOKです。MySQLも自動起動をONにしときましょう!# MySQLの自動起動設定systemctl enable --now mysqld初期状態では、rootユーザーがパスワードなしで MySQLに接続できるようになっていますのでパスワードを設定しましょう!mysql_secure_installation --use-default#実行したら、パスワードの入力を求められるのでパスワードを設定してください設定したパスワードで入れるか確認# MySQLへ接続できるか確認とMySQLのツール『Sequel Pro』を使えるように設定変更する。mysql -uroot -p# パスワード入力でmysqlに接続されればOK!Sequel Proなどのツールを使っていると、接続できない!ってエラー出ると思います。なので、もう少し設定していきましょう。# MySQLのrootの「caching_sha2_password」 を 「mysql_native_password」に変更しますALTER USER 'root'@"localhost" IDENTIFIED WITH mysql_native_password BY 'パスワード';# ↑が終わったら設定を反映FLUSH PRIVILEGES;# MySQLからexitしてSequel Proで接続を確認する。exitこれでSquel Proの接続してみて、接続されればOK!続いて、Laraveをインストールする為に必要な「Composer」をインストールしていきましょう。## Composerのインストール# まず、wgetのインストールdnf install -y wget# ゲットできたら、インストーラーのダウンロードwget https://getcomposer.org/installer -O composer-installer.php# ダウンロードしたら、インストールphp composer-installer.php --filename=composer --install-dir=/usr/bin# インストールが完了したら一応実行しとくといい。(バージョン確認用)composer self-updateバージョン表示の確認できればOKです!さてさて、やっと本題のLaravel9のインストールですね!!サクッと行ってみましょう!!## Laraveのインストール(Ver.9)composer create-project "laravel/laravel=9.*" プロジェクト名インストールが終わったらバージョン確認してみましょう。プロジェクトへ移動してphp artisan -V> Laravel Framework 9.1.0バージョン表示されましたか?されてればOKですよ!!!これで、ブラウザから確認してLaravel9の画面が出てればOKです。おめでとうございます!!ここからは、Laravelを使う上で必要になってくるnpmのインストールやSSL(https)をするためにpythonやcertbotのインストールになりますので、ここまでの方はお疲れ様でした〜!!!という事で、どんどん行きましょう!Pythonのインストール。Let's Encrypt(Certbot)を使えるようにする為dnf -y install python39 python-pip augeas-libs# python-pip39とすると私はエラーがでたので、python-pipとしてます。# もしpython-pipのところでエラー出る人はpython-pip39にしてみると良いかもしれません。↑ 終わったら下記実行してCertbot(Let's Encrypt)をインストールします。sudo python3 -m venv /opt/certbotsudo /opt/certbot/bin/pip install --upgrade pipsudo /opt/certbot/bin/pip install certbot certbot-apachesudo ln -s /opt/certbot/bin/certbot /usr/bin/certbotインストールが終わったらバージョン確認してみましょう。# バージョン確認 (表示されればOK) certbot --version続いては、いつも通りhttpsをかける設定です。# 登録・実行certbot certonly --webroot -w /ディレクトリ/public/ -d ドメイン↑はいつも通りのコマンドですね。OSが変わったからと言って、ここのコードが変わるわけではないです!安心安心ここで、apacheの再起動忘れずに続いてnpmのインストールです。# npmのインストール(root権限で)dnf install nodejsインストール終わったらバージョン確認# バージョン確認npm -vバージョンが表示されてたらOKです。お疲れさまでした!!補足ですが。CentOS Stream9から/etc/にあった「hosts.allow」や「hosts.deny」がなくなっています。これはsshの接続を許可するIPを制限するための設定ファイルになるんですが、ものが無い。ならどうすんだ!って思った方。安心してください!履いてますよ!(古!CentOS Stream9からは「sshd_config」で行います。# SSHの接続制限(IP制限) 旧hosts.allow, hosts.denyvi /etc/ssh/sshd_config# sshd_configに下記追加します。AllowUsers username@接続許可IPアドレスusernameのところは、接続したいusernameです@の後ろはIPアドレスになります。ですが、この設定hosts.allowやdenyと違ってIPの制限はされますがパスワードの入力までは見えてしまします。そこで、もしssh自体を制限したい場合は、Firewalldで行う必要があります。Firewalldは色んな設定の仕方がありますので、Firewalld sshなどでGoogle先生に聞いてもらったほうが色々書くより早いと思います。Firewalldでsshの書かれてるところを消して、usernameなどを設定、またIPアドレスなどもそこで設定してれば問題なくhosts.allow, denyの設定のような感じになると思います。どちらにしてもsshd_configの設定は必要ですので、お忘れなく。最後にsshd_configを触ったら再起動しておきましょう。# 設定の反映systemctl restart sshdまだまだ他にも細かい設定などはありますが、そこは省きました。httpdの「ServerTokens」や「ServerSignature」などphp.iniの「expose_php」などなど。今回はとりあえず、LAMP環境構築からLaravelをインストールして、npmやcertbot(Let's Encrypt)の一通りWEBサーバーとして使えるようにする設定のご紹介でした。長かったですが、最後まで読んでいただきありがとうございました。

Dockerを使って、とりあえずLaravel~MySQLまで使えるようにしよう(構築 前編)

みなさんご無沙汰してます!Docker使ってますか~!?大規模・小規模開発、関係ないです!節約につながるので、是非是非Dockerを使いましょう!!そして、少しでもサーバー構築の知識をつけてもらえたらと思います。環境はMacです。Windowsだと、すんなりインストールできる人とできない人が居るかもです。Windowsでつまずいた人は、ここらへん見るといいかも。Windows 10 + WSL 2 でDocker環境を構築する(Docker Desktop有料化対策)Windows docker起動エラー(WSL2 利用)今回の記事では、サーバー知識なくてもとりあえず、この手順通りやれば構築できるよ!?って感じでお伝えできたらと思います~!!まずは、Dockerがないと話しにならない!Dockerをインストールしましょう!(あ、Docker=ドッカーって読むみたいです)Docker公式サイト公式サイトを開いたら右上にある『Get Started』へ移動しましょう!そしたら、こんな画面になります。左の『Docker Desktop』からお使いのOSを選択しましょう!たぶん、デフォルトでお使いのOSが選ばれてると思います。画像左の『Download for Windows』って書いてる下向きになってるアイコンからOS選択できるのでそこから選んで見ましょう。AppleのM1チップをお持ちの方は、Apple Chipを選択してください。macの方CPUの確認は『アップルマーク → このMacについて』を押すとわかりますよダウンロード完了したら、インストールしてください。無事インストールが終わったらアプリを起動しましょう。※ Windowsの方は、ここで再起動しろと言われます・・・(Windowsのこう言う所うざいっすよね。右上あたりにクジラのアイコンが出てると思います!!クジラアイコンをクリックして画像部分が緑になってたら起動成功です。おめでとうございまーーーーーーーす!!!続いて、コンテナを作っていきましょう。(コンテナを作る準備をしましょう!)

LaravelでNamespace declaration statement has to be

Laravelでルートは合ってるのに、Not Foundが出る解決方法

Laravelで簡単にバックアップしてCronで別サーバーへFTP転送までを自動化してみた

久しぶりの投稿です。12月は忙しく、事務所の移転もしたりとバタバタでした。回線の移動が、ビビりまくりでしたねぇ!!と言うことで、本題に戻しますw今までCronを使ってシェルなどを動かしてバックアップを取っていたのですがLaravelには凄く便利なバックアップ方法がありましたので、そちらを共有したいと思います!!//SSHで下記実行(Laravelのルートへ移動して実行してくださいね)composer require "spatie/laravel-backup:5.*"spatie/laravel-backup:5.* ← 5.*はLarave V5系ならこれ。Laravel 6系ならspatie/laravel-backup:5.* → spatie/laravel-backupとしてください。実行したら、だらだら〜とインストールが始まってPackage manifest generated successfully.って出たら完了です次に//同じくSSHのLaravelルートで実行してください。php artisan vendor:publish --provider="Spatie\Backup\BackupServiceProvider"とすると、configディレクトリにbackup.phpが生成されます。こちらは、特に触らなくても問題ないです。一応実行だけしときます。このファイルはバックアップの場所とか色々設定ができます。ここまでしたら、一旦完了です!!すげー!簡単だ!!//実際に動くのか確認しましょう!!!(Laravelルートで行ってね!!!)php artisan backup:runたぶん色々とエラーは出ると思いますが、実行はされてるはずです。エラーが出る人はphp artisan backup:run --disable-notificationsこちらで実行してみてください。実行結果は、/Laravel_Root/storage/Laravel/の中にzipファイルが出来上がります。このzipファイルの中に、LaravelのソースコードとDatabaseのdumpデータが入っています。もし、zipのパッケージが入ってない人はパッケージをインストールしてください。インストール方法は//zipのインストールyum -y install --enablerepo=remi-php71 php-pecl-zipzipをインストールしたら、もう一度php artisan backup:runを実行してみてください。/Laravel_Root/storage/Laravel/ の中にzipファイルができましたか??出来てない人は、チャットなどで問合せてくださいw時間を見て順次返答してみます。ここまでで、一旦サーバーにバックアップを創ることが出来たと思います。ですが、サーバーにバックアップを取っても、サーバーがぶっ飛んだら意味がない!!!と言うことで、弊社は別のサーバーをバックアップに立てて、そちらにバックアップデータを入れています。この場合はFTPやSFTPとかでアップしてるので(scpとか使わないの?とか言わないでくださいね。)先にそちらの話しをしてみましょう!!!LaravelにはStorageクラスというものがあり、こちらが非常に便利です!!!まずは、config/filesystem.phpを開いてみましょう!!//config/filesystem.phpの中身(一部)'disks' => [ 'local' => [ 'driver' => 'local', 'root' => storage_path('app'), ], 'public' => [ 'driver' => 'local', 'root' => storage_path('app/public'), 'url' => env('APP_URL').'/storage', 'visibility' => 'public', ], 's3' => [ 'driver' => 's3', 'key' => env('AWS_ACCESS_KEY_ID'), 'secret' => env('AWS_SECRET_ACCESS_KEY'), 'region' => env('AWS_DEFAULT_REGION'), 'bucket' => env('AWS_BUCKET'), 'url' => env('AWS_URL'), ], //↓こちらを追加してください。 'ftp' => [ 'driver' => 'ftp', 'host' => 'hostname or IPアドレス', 'username' => 'FTPユーザー名', 'password' => 'FTPパスワード', ], ],今回はFTPとしていますが、SFTPなどもいけますし見てわかるように、s3などへも簡単に出来ますよ。https://readouble.com/laravel/5.5/ja/filesystem.htmlこちらを参考にしてもらったら、Storageクラスがある程度わかると思います。細かくポートやパッシブモードなども設定できます。次に、転送させる為のコードを書くのですがStorage::disk('ftp')->put('保存するファイル名', '保存する中身');このコードを実行すると、自動的にconfig/filesystem.phpで設定した、FTPへファイルを作ります。なんとたったの1行!!すげー!さて、ここまでで、バックアップファイルの生成からFTPへ転送までが完了しましたここから、それじゃーバックアップしたデータを自動的にFTPへ転送してぇ〜よ!ってところでここで登場するのが、Cronです。Cronはサーバーで指定した時間に自動的に実行してくれる便利な機能です。Cronの設定は、各々扱うユーザーなどが違うかもなので、私の設定で書きます。まずはSSHで書かないといけないので、順に説明しながら書いていきます。//SSHでディレクトリを移動してください。cd /etc//etcの中にあるcrontabと言うファイルを開きます。vim crontab//そうすると、中身が出てきます。# Example of job definition:# .---------------- minute (0 - 59)# | .------------- hour (0 - 23)# | | .---------- day of month (1 - 31)# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat# | | | | |# * * * * * user-name command to be executed急に英語でてきて、わかんねぇ!!って言わないでくださいねwとりあえず、少し話しは脱線しますが、Cronの説明をしていきます。* * * * * ← 5つの*がありますが、こちら、英語の説明を簡単に訳すと1つ目の* 分 (0〜59)2つ目の* 時間 (0〜23)3つ目の* 日 (1〜31)4つ目の* 月 (1〜12) (数字じゃなくて、jan,feb,mar,apr ...みたいに書いてもいいよ!)5つ目の* 週 (0〜6) (0:日曜、1:月曜、2:火曜、3:水曜、4:木曜、5:金曜、6:土曜) 数字じゃなくても(sun,mon,tue,wed,thu,fri,sat みたいに書いてもいいよ!)という風になっています。例題をいくつか作ってみましょう。毎日朝4時30分に実行したい場合は30 4 * * * となります。毎週月曜日の朝4時30分に実行する場合は30 4 * * 1となります。毎月1日の朝4時30分に実行する場合は30 4 1 * *となります。だいたい、わかりましたか?それでは、これで話しを本題に戻しましょう。次に、Laravel側の設定をしないといけません。/Laravel_Root/app/Console/Karnel.phpのファイルを開きます。// Laravel_Root/app/Console/Karnel.phpの中(一部)protected function schedule(Schedule $schedule) { // $schedule->command('inspire') // ->hourly(); }このようになっていると思います。こちらのschedule関数の中を少し触ります。protected function schedule(Schedule $schedule) { //ソース:DBまるごとバックアップするコマンド $schedule->command('backup:clean'); //←追加 $schedule->command('backup:run'); //←追加 // $schedule->command('inspire') // ->hourly(); }このように、登録することで、SSHからartisanコマンドで、このschedule関数を呼び出すことが出来ます。実際にやってみましょう!//SSHで下記実行してみましょう。(Laravelルートでやってくださいね)php artisan schedule:run↑さっきは php artisan backup:runでしたが、今回はschedule:runです。schedule関数を呼び出しています。これをすることで、先程 /Laravel_Root/app/Console/Karnel.phpで書かれたschedule関数が動きます。スケジュール関数には$schedule->command('backup:clean'); //←追加$schedule->command('backup:run'); //←追加この2つを登録したので、まずは古いバックアップをクリーンにしてから、新しいバックアップを創る処理をしていますね。なので、schedule:runをしたらこちらが動きます。ほんとにわかりやすいですね〜(^o^)v続いて、この中に(不細工なやり方ではありますが....)scheduleのcall関数を使って、このままFTPへ転送の処理も書いちゃおう!$schedule->command('backup:clean');$schedule->command('backup:run');//↓を更に追加しますよ//バックアップファイル転送処理$schedule->call(function(){ $files = Storage::files('Laravel'); //バックアップファイルがあれば転送 if(count($files)){ Storage::disk('ftp')->put('BKUP/'.date('Ymd_His').'_bkup.zip', Storage::get($files[0])); }});これで、SSHからphp artisan schedule:runを動かすと1:古いバックアップデータをクリーンする。2:新しいバックアップを作成する。(zipの中身は、Laravelのソース+Sqlのdumpデータ)3:ファイルが出来たら、自動的に別で用意してるFTPへ転送する。という所が出来ました。ここまで来たら、あとはCronで設定するだけですね。//SSHでCronを設定する。cd /etcvim crontab//Crontabで毎日朝4時30分に、schedule:runして!30 4 * * * cd /Laravel_Root/Laravel Project && php artisan schedule:run >> /dev/null 2>&1//↑Crontabを保存して↓をSSHで実行してください。crontab crontabあとは、朝4時30分になると、Cronが自動的に処理してくれます。ここまでで、Laravelの公式にも書かれているspatieを使って、Laravelのソースコードやデータベースのバックアップを取ってそれを自動的にzipファイルにしてくれて、そのzipをまるごとFTPへ転送!!なんとCronも使って全自動!ってことで、かなり長くなりましたが、これで出来ると思います。余談を書くと、zipファイルが残るようであればサーバー内の容量が食われるのでFTPの転送が終われば、Storage::deleteを使ってファイルの削除をしてたほうが良いかも知れませんね。それでは、長々となりましたが、最後まで読んでいただきありがとうございました〜ちょくちょく更新がんばります〜m(_ _)m

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

jQuery UIのAutocompleteを使ってみる

記事をもっと見る