▽1
●
たいがあ ●100ポイント ベストアンサー |
画像をfile_get_contentsするとバイナリデータですから、パス情報を必要とするgetimagesizeは失敗します。
直接パスをgetimagesizeして諦めて下さい。
HTTPリクエストが嫌ならローカルに保存するしかありません。
と思ったら、こんなのできました。
$url = 'http://example.com/a.jpg’;
$data = file_get_contents($url);
$im = imagecreatefromstring($data); // バイナリをリソースIDにする
echo 'width='.imagesx($im);
echo ' height='.imagesy($im);
私の環境では、HTTPリクエストを発生させた方が全体の処理が早かったです。
【追記】
自己解決という事でポイント不要です。
$url = 'http://example.com/a.jpg’;
$data = file_get_contents($url);
/* http://wakuworks.jugem.jp/?eid=157 */
$img = base64_encode($data);
$scheme = 'data:application/octet-stream;base64,';
$size = getimagesize($scheme . $img);
var_dump($size);
imagecreatefromstringで、channelsとbitsの取得はできますか?
HTTPリクエストが2回が嫌な理由は、失敗確率が2倍になるからです。
ローカル保存はありですね。
getimagesize関数だって内部的にはfopenしてるはずだから、getimagesize(file_get_contents($file))みたいなのがができないのはおかしい、と思ってしまったのです。