「PHP」カテゴリーアーカイブ

[画像処理][PHP]GDライブラリを使っている際に表示されるエラーへの対処法

PHPのGDライブラリを使っていると稀に以下のようなエラーに出会うことがあります。

Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: gd-jpeg, libjpeg: recoverable error: Premature end of JPEG in /path/to/file.php on line xxx

ネットで調べる限りでは、このエラーはjpgファイルが破損している場合に起きるケースが多いようです。
結論から言うと完全な解決法は見つけることができなかったのですが、私なりの対処法をご紹介します。

解決法

「ファイルが壊れているのであれば、修復してしまえばいい」
というのが解決法です。
なんというか、シンプルな解決法なのですがこれが結果的に一番簡単でした。

大量のファイルを処理する場合であれば少し面倒かもしれませんが、
MacであればImageOptimなどに壊れたファイルを突っ込むと壊れていないjpgになります。
元々壊れているファイルなので見た目がきれいな画像が出来上がる保証はありませんが、jpgファイルという意味では破損はなくなるようです。
(ついでにファイルサイズも小さくなりますが、画質が少し落ちるかな?という印象)

試してはいないですが、ブラウザから使えるJPEGminiなどを利用してもいいのではないかと思います。

修正したファイルであればGDライブラリは正常に動作するようですので、リサイズなりなんなり自由自在というわけです。
元々が破損したファイルなので「画像の半分が見れない!」などということもあるかもしれませんが、
業務などで大量の画像ファイルのリサイズ処理をGDでやる必要が出てきた場合には検討してみてください。
リサイズするだけなら縮小専用でいいような気もしますが。

とりあえず破損したままでも処理を続行

このサイトに書かれていた方法です。
http://www.atyks.org/blog/detail/2011-10-14-9
以下の記述を追加することで処理の実行は進むようです(未確認です。。。)。

ini_set("gd.jpeg_ignore_warning", 1);

おわりに

海外であれば情報はある程度あるのですが、日本語での情報が少ないようだったので簡単にですが紹介しました。
海外記事

株式会社みのモンでは、たくさんの画像を掲載する必要があるようなサイトの構築のご相談もお待ちしております。
上記GDライブラリも必要であれば使いますし、そのサイトにあった方法で構築をいたします。
PHPを使った大規模なシステム開発から、ホームページ(PC・スマホサイト)構築などのご相談はお気軽にどうぞ!
株式会社みのモンのホームページはこちら

ランダム文字列生成ツールを公開します

ランダム文字列生成ツールを作成しましたので公開します。

一部の識別しにくい文字列を除いた文字の中から指定した文字数でランダムな文字列が生成されます。
複数件生成されるので、気にいる結果が出るまで何回もリロードする必要がないです。

tools_make_kw
ランダム文字列生成ツール

仮のパスワードを生成する場合など、何でもいいので長い文字列が欲しい!という際に使って下さい。

仕組みは、裏でPHPを使っています。

  1. リクエストされた文字種からランダム文字列用に使う文字を選ぶ
  2. 選ばれた文字群からランダムに字を決まった数だけ抽出

という超基本的なことをやってるだけなんですけどね^^

プログラム的には難しいものではないですが、
社内でのテストの際などに意外と活躍してくれてます。

他にも便利ツールを作成したら紹介したいと思います。

jquery-1.10.2.min.mapが404 Not Found

fuelphpを使っていて謎のエラーが出ていたのを解決したので同じ問題を持った人のために記事にします。

そのエラーはjquery-1.10.2.min.mapが404 Not Foundというエラーでした。
そんなファイルを読み込んだ覚えもないし。。。と思いjsを読み込んでいる部分をのぞいてもそれっぽいのがない!

jqueryがらみなのは間違いなさそうだったので/assets/js/jquery.jsを確認すると、一番はじめに次のようなコメントが書かれていました。

/*! jQuery v1.10.2 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license
//@ sourceMappingURL=jquery-1.10.2.min.map
*/

ん〜ソースマップのURLが書かれてますね。。。

原因はこれなので、サクッと1行削除して

/*! jQuery v1.10.2 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license
*/

とするとエラーは消えます。
もしjquery.jsの変更をしたくない場合は、jquery-1.10.2.min.mapをjquery.jsと同じフォルダに置いてあげるとOKです。

上記の例の場合は以下のリンク先のファイルを配置することでエラーが無くなりました。
» jquery-1.10.2.min.map

上記のようにソースマップを同じ場所に置くことで解消されますが、ソースマップに対応したブラウザだとソースマップのファイルを読み込むために1リクエスト余計なアクセスが増えることになります。
「1行消す」か「ソースマップを配置する」かはお好みに応じて対処してください。

補足

このソースマップのURLの記述はどうやらjQuery1.9から追加されたようです。
ソースマップについて詳しく知りたい方や、ソースマップ対応されていることでどんなメリットがあるかについては、以下のURLにわかりやすい説明があります。
» [てっく煮ブログ]jQuery 1.9 のソースマップ対応で圧縮版でもデバッグが簡単になった話

ちなみに、現在ソースマップに対応しているブラウザはGoogleChromeのみのようです。
Firefoxも対応してきているようですが、まだ不十分のようです。
以下の記事にそのことが書かれてました。
» [terurouメモ] Firefox 23でSource Mapsが実装されたみたいだけど、まだちゃんと動いてない?

今回の私のケースはfuelphpでしたが少し古いwordpressを使っている場合にも同様のエラーが出るケースがあったようです。
» [設定やツールとか]WordPress 3.6でjquery-1.10.2.min.mapのエラー

WordPress 3.6だと、jquery-1.10.2.min.mapのエラーが出る。原因はWordPressで使っているjquery.jsのヘッダー記述の問題。
WordPress 3.6.1でこのバグが修正された。3.6.1以降を使っていればこの問題はおきない。

とのことです。

同様のエラーが出た人の参考になれば幸いです。

営業時間検索サイトαバージョンを公開しました

営業時間を調べることができるサイトを公開しました。
http://eigyojikan.minomon.jp/
capt_eigyojikan

まだ十分に機能と情報が入っていませんが、αバージョンとして公開し反応を見て改善をしながら正式公開に向かおうと思っております。

夜中に急にCDやDVD・ゲームなどを買いたくなった時に、まとめて開いている店舗を探したい時などに使えます。
エリアとジャンルを絞って探せるので、探したい情報が見つかると思います。

今後の追加予定機能として、
・現在地周辺から探す機能
・地図から探す機能
・今開いているお店検索機能
を予定しております。

更新情報はtwitter(@eigyojikan_info)でも発信しておりますので、興味がある方はチェックしてみてください。

よく使う設定メモ(都道府県配列)

お客様からの依頼で独自システムを構築したり、注文フォームを作成する際などに、都道府県のデータを配列として設定ファイルやDBに持つ事があります。
しょっちゅうではないため、毎回同じような設定ファイルを書いていました。。。

今回、何度目か分からないくらいの作成だったというのもあり、私以外にも同じような方がいるかもしれないと思いましたので、都道府県の設定ファイルの該当部分のみを載せておきます。

$pref_options = array(
			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 => '鳥取県',
			32 => '島根県',
			33 => '岡山県',
			34 => '広島県',
			35 => '山口県',
			36 => '徳島県',
			37 => '香川県',
			38 => '愛媛県',
			39 => '高知県',
			40 => '福岡県',
			41 => '佐賀県',
			42 => '長崎県',
			43 => '熊本県',
			44 => '大分県',
			45 => '宮崎県',
			46 => '鹿児島県',
			47 => '沖縄県');

私は上記設定を使うことが多いのですが、以前別のパターンが必要だったこともあったので、そのパターンも掲載しておきます。

$pref_options = array(
			'北海道' => '北海道',
			'青森県' => '青森県',
			'岩手県' => '岩手県',
			'宮城県' => '宮城県',
			'秋田県' => '秋田県',
			'山形県' => '山形県',
			'福島県' => '福島県',
			'茨城県' => '茨城県',
			'栃木県' => '栃木県',
			'群馬県' => '群馬県',
			'埼玉県' => '埼玉県',
			'千葉県' => '千葉県',
			'東京都' => '東京都',
			'神奈川県' => '神奈川県',
			'山梨県' => '山梨県',
			'長野県' => '長野県',
			'新潟県' => '新潟県',
			'富山県' => '富山県',
			'石川県' => '石川県',
			'福井県' => '福井県',
			'岐阜県' => '岐阜県',
			'静岡県' => '静岡県',
			'愛知県' => '愛知県',
			'三重県' => '三重県',
			'滋賀県' => '滋賀県',
			'京都府' => '京都府',
			'大阪府' => '大阪府',
			'兵庫県' => '兵庫県',
			'奈良県' => '奈良県',
			'和歌山県' => '和歌山県',
			'鳥取県' => '鳥取県',
			'島根県' => '島根県',
			'岡山県' => '岡山県',
			'広島県' => '広島県',
			'山口県' => '山口県',
			'徳島県' => '徳島県',
			'香川県' => '香川県',
			'愛媛県' => '愛媛県',
			'高知県' => '高知県',
			'福岡県' => '福岡県',
			'佐賀県' => '佐賀県',
			'長崎県' => '長崎県',
			'熊本県' => '熊本県',
			'大分県' => '大分県',
			'宮崎県' => '宮崎県',
			'鹿児島県' => '鹿児島県',
			'沖縄県' => '沖縄県');

ちょっとしたことですが、何度も同じことを調べて書くというのは無駄ですので、どなたかの役に立てばうれしいです。