画像を保存してみるテスト

fopen で url が扱えるサーバーならば、別に問題ないのですがいろいろな関係で現在使えないところも多々あります。
で、そういうところじゃよそ様へアクセスする手段は全然ないのだろうかと思っていたところ、curl が使えるということがわかりまして、この辺りを使ってテストがてら書いてみたスクリプト。

ただし、curl と gd が入ってるサーバー用です。
CURLOPT_REFERER に URL を設定してやると REFERER 見て画像を参照させているようなところでも画像が取れるようですね。

使い道があるのかないのかわかりません。
相変わらずソース表示するとインデントがなくなっちゃっててすいません。

<?php
function is_url($text) {
if (preg_match(‘/^(https?|ftp)(:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)$/’, $text)) {
return TRUE;
} else {
return FALSE;
}
}

if ( isset($_POST[‘url’]) && trim($_POST[‘url’]) ) {
if ( is_url($_POST[‘url’]) ) {
$filename = basename($_POST[‘url’]);

$ch = curl_init($_POST[‘url’]);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt($ch, CURLOPT_REFERER, $_POST[‘url’]);
$tmp = curl_exec($ch);
if ( ($fp = fopen ( $filename, "wb" )) != NULL ) {
fwrite ( $fp, $tmp );
fclose($fp);
}
curl_close($ch);

if ( $siz = getimagesize($filename) ) {
$w = $siz[0] / 4;
$h = $siz[1] / 4;
printf ( ‘<img src="%s" width="%d" height="%d"><br/>’,
$filename, $w, $h );
}
}
}
?>

<form method="POST" action="<?php print $_SERVER[SCRIPT_NAME]; ?>">
<input type="text" name="url"><input type="submit" value="getimage">
</form>

広告

About sato_c

小学生の頃にインベーダーゲームやPC-8001やApple][といったものを知ってしまい、それ以降ずーっとゲーム好き。でも、あんまりうまくはありません。 仕事は当初はゲーム関係のプログラムやサウンドをやっていましたが、WEB関係を通ったあと、遊技機関係のプログラムやサウンドをやっています。あまり節操がないのか。 現在はJavaですてきなコードを書けるように勉強中。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。