茶トラ猫エンジニア

フリーランスとして働く、先が見えないエンジニアのメモ帳

PHP

PHPのステータスコード別のheader関数の引数

PHP

PHP で意図的に特定のステータスコードでレスポンスを返そうと思う場面がときどきあります。 フレームワークによってはフィルタで設定したり、目的のコントローラ内に定義したり作法はそれぞれですが、通常のシンプルな PHP スクリプトであれば header() 関…

LaravelでExcelのインポートとエクスポートを行う

PHP

Laravel には PHPExcel のラッパークラスライブラリが提供されています。 その名も「Laravel Excel」 Laravel Excel しかし、PHPExcel のサポートが終了し、現在は後継の PhpSpreadsheet が主流となっているため、Laravel Excel もバージョン 2.1 系から 3.0…

PHPのStdClassで動的なプロパティ名を扱う

PHP

普段は連想配列派なのですが、既存のコードを触っていると StdClass のオブジェクトに遭遇することが時々あります。 それ自体は問題ないのですが、プロパティ(メンバー変数)が連番になっていたりするとループして初期化したくなります。 でも StdClass のプ…

Laravelのold()で配列を扱う場合のインデックスの表現方法

PHP

検索フォームや登録画面など、form タグで値を POST する場面ってありますよね。 幸い、Laravel のバリデーションが柔軟にやってくれるので、フォームリクエストクラスを用意したり、ベタにコントローラにバリデーションを書いている人が多いと思います。 も…

ページが見つからない時(404)にNginxとCodeigniterでトップページを表示する

PHP

とあるサイトへのアクセス状況がいまいちだったので、ドメインはそのままでサイトのジャンルを変えてリニューアルしてみました。 その際、不要な URL パスがいくつか残ってしまっているので 404 のアクセスが出続けます・・・。 Google に一度でもインデック…

PHPのCarbonで月末から正しく翌月末の日付を求める

PHP

PHP に限ったことではないですが、日付関数の 1 ヶ月後や 1 ヶ月前にはいろいろと苦労してきました。 これには 2038 年問題とはまた違った、今すぐにでも起こりえる問題だからです。 今回は Carbon の便利な機能について紹介します。 日付で苦労するパターン…

LaravelのRequestFormでattributesのオーバーライドが効かない

PHP

Laravel の RequestForm クラスを使ってバリデーションを行っている人も多いと思います。 コントローラやリポジトリクラスに定義してもいいのですが、凝ったことをしないのであれば、RequrstForm は便利です。 ただ、以前から上手くいかないことがあったので…

さくらのレンタルサーバでCodeigniter3のSSL向けhtaccess設定

PHP

ここ数年は、AWS を使うことが多かったのですが、久し振りにさくらインターネットのレンタルサーバ「スタンダードプラン」を契約しました。 せっかくなので、Codeigniter でサイトを複数動かそうと思い、それぞれのドキュメントルートに Codeigniter3.1.6 を…

Laravel5.4から5.5へバージョンアップ

PHP

Laravel5.5 がついにリリースされたので、5.4 ベースで作っていたものをバージョンアップしてみました。 5.4からのバージョンアップ 5.4からのバージョンアップ composer.json の以下の部分を 5.5.* に変更するだけですが、依存関係のパッケージも問題なくア…

ぐるなびAPIで飲食店の店舗情報を取得する

PHP

過去に作成した「ぐるなびAPI」のプログラムや、ぐるなびの Web Service が新しくなったこともあり、API からの情報取得プログラムを書き換えてみました。 以前の記事は下記になります。 www.saratoga.jp API バージョンや API キーの発行についても、色々と…

Laravel5.4の認証ユーザーのパスワードハッシュについて

PHP

Laravel で用意されている認証モジュールを利用する際、ユーザーモデル(User.php)経由で登録されるパスワードのハッシュ方法について調べてみました。 パスワードのハッシュ方式 password_hash()のハッシュ関数の特徴 パスワードのハッシュ方式 Laravel 上で…

Laravel5.4のコントローラコンストラクタでAuth::user()が取得できない

PHP

Laravel5.4 で認証を通したアクセスに対して、コントローラのコンストラクタでユーザモデルの値を取得しようと思ったら、なぜか Auth::user() の値が取得できなくて悩みました。 public function __construct() { // 認証情報を取得 $user = \Auth::user(); …

AmazonLinuxでApache2.4+php7.1+Laravel5.5

以前書いた「VagrantでCentOS6.9のイメージを使う」の通り、CentOS6.9 には Apache2.4 と PHP7.1 で Laravel のフレームワークが使える環境を構築しました。 www.saratoga.jp ただ、将来的には AWS かつ Amazon Linux 上で動かしたいので、Amazon Linux だと…

Laravel5.1からLaravel5.5へアップデートする

PHP

LTS だった Laravel5.1 のバグフィックスサポートが 2017 年の 6 月で終わり、セキュリティサポートも 2018 年の 6 月で終了となります。 このタイミングで、兼ねてから発表のあった、次期 LTS の Laravel5.5 が 2017 年の 7 月に登場しますが、今日時点では…

LaravelでQueueのジョブ完了イベントを使ってログ履歴を残す

PHP

Laravel の Queue のリスナーは便利なのですが、ジョブの失敗は failed_jobs テーブルなどに残せるものの、逆にジョブの実行に成功した場合の履歴が残しにくい作りになっています。 ただ、一応、ジョブ実行成功時の機構は用意されていて、ServiceProvider ク…

LaravelのEloquentで実行されるSQL文を出力する

PHP

Laravel で Eloquent を使ってクエリを発行する際、実際に実行される SQL 文を確認したい時があります。 どちらかというと、O/R マッパーみたいなものは好きではなくて、生の SQL 文を書いて実行する方がいいのですが、Eloquent を使うメリットももちろんあ…

LaravelのBladeテンプレートで変数の展開をする(バージョン4と5の違い)

PHP

何気なく Blade ファイルを触っていたら、Laravel のバージョン 4.2 と 5.1 で定義の仕方や挙動が変わっていることに気付きました。 変数の中身のエスケープ Laravel5.1のBladeの挙動 Laravel4.2のBladeの挙動 その他の構文と公式ドキュメント 変数の中身の…

PHPで半角スペースのみで構成された文字列を判定する正規表現

PHP

半角スペースのみで構成された文字列をチェックする PHP のソースコードをたまたまレビューする機会があり、何気なくその時は通してしまったのですが、後で空文字も判定に引っ掛かってしまうことが判明して大きく反省している、そんな平穏な日です。 そもそ…

PHP5.6でphp-fpm起動時にACLのワーニングが出る場合の対応

PHP

新たに PHP5.6 の環境を構築していたのですが、php-fpm の設定をして起動しようとしたら下記のエラーが発生。 これまでと同じ手順で設定していたので、設定を間違えたのかと思いましたが、user や group などは間違っていません。PHP のバージョンは 5.6.17 …

Codeigniterでバッチ処理に役立つcron.php

PHP

curl コマンドを使って Web 経由で叩いていた一部のバッチ処理を、cron.php を使って動作させるようにしました。 どちらにしても、シェルから実行させるのには変わりないのですが、リクエストのタイムアウトや、nginx, apache のリソースを考えると、php ク…

GDライブラリがロードされているのにJPG images are not supported

PHP

フレームワークとは直接関係ないですが、Codeigniter で構築しているサイトで画像のリサイズをしようとしたら下記のエラーに遭遇しました。 Your server does not support the GD function required to process this type of image. JPG images are not supp…

PHPアプリに最適なデプロイ方法を考える

PHP

ローカルの開発環境については、この数年で選択肢が増えどれも短時間で準備ができるという便利な世の中になりました。 昔は、Windows 向けのアプリ開発においては VisualStudio という IDE(統合開発環境)があり(今もありますが)、VisualBasic(VB)を使って開…

アメブロへ楽天APIなどの情報をPHPで自動で投稿する

PHP

技術者ならではの発想なのかもしれませんが、楽天や Yahoo が提供している API を使って取得した情報を頑張って整形して、ブログの記事をせっせと書いている人が多いことに気付いた数年前。 これを全部自動化してしまえば効率いいのになって思い、プログラム…

PHPからRedisを使うPhpredisライブラリ

PHP

以前「CentOSでRedisサーバを使う」で Redis サーバとクライアントの設定をまとめましたが、実際に php のアプリケーションから利用する方法も書いておきたいと思います。 www.saratoga.jp phpredisの設定 Redis用のクラスを作成する Redis用のクラスを利用…

FC2とその他の無料ブログに自動投稿するPHPプログラム

PHP

以前書いた「アメブロへ楽天APIなどの情報をPHPで自動で投稿する」の反響が良かったので、どうせならアメブロ以外の無料ブログの XML-RPC を使った自動投稿も紹介したいと思います。 www.saratoga.jp ざっと調べたところ、現在、XML-RPC による投稿に対応し…

ZendFrameworkのコントローラーの基本的なことをメモ

PHP

以前、少しだけ ZendFramework を使う機会があったので、今後使う機会のことを考えてメモっていたことをまとめておく。 まあ、Zend のマニュアルを見た方が早いのですが。 コントローラーのクラス名とメソッド名は URL とマッピングされる。 例えばコントロ…

SmartyでYYYYMMDDの文字列から日付表示をする方法

PHP

Smarty の date_format を使うと、YYYYMMDD HH:MM:SS のような日付はきれいにパースしてくれます。 しかし、YYYYMMDD の文字列を日付のフォーマットには変換してくれません。 今回は、Smarty で YYYYMMDD の文字を日付フォーマット変換する方法を紹介します…

さくらインターネットのphpのパーミッション

PHP

Evernote の php の API サンプルを動作確認するために、Cygwin からさくらのレンタルサーバにコピー(scp)したのですが、Internal Server Error(500) になり詳細なエラーもログに吐かれない状況が続きました。 唯一のログも Premature end of script headers…

さくらインターネットのallow_url_fopenの設定が変わった

PHP

さくらインターネットのレンタルサーバで、急に外部ファイルの取得ができなくなりました。 私の場合は、自分のサイトの RSS を取得して新着表示しているのですが、データの取得に失敗しています。 取得できなくなった原因 fopenの実行設定 取得できなくなっ…

PHPとMySQLで画像をBLOB型で管理する

ショップや病院など、タウン情報やグルメ情報などの紹介サイトには写真が使われることが多いです。 写真の画像はフォームからアップロードしてファイルとして保管することが多いですが、データベースでバイナリを管理することもできます。 データベース管理…