copy()
URLからサーバーに画像を保存するためにPHP関数を使用するスクリプトを使用しています。copy('http://si.com/guitar.jpg', 'guitar1213.jpg')
私が疑問に思っているのは、この関数を呼び出すときに最大ファイルサイズ制限を簡単に設定できる方法があるかどうかです。それとも.htaccess
、これをすばやく修正する唯一のオプションですか?
前もって感謝します
ファイルがサーバー上にある場合にのみファイルサイズを取得できます。ファイルを一時フォルダーにダウンロードすることをお勧めします。そうすれば、ファイルサイズを簡単に確認して、要件を満たしている場合は正しい場所に移動できます。
$original_path = 'http://si.com/guitar.jpg';
$temp_location = 'guitar1213.jpg';
$handle = fopen($temp_location, "w+");
fwrite($handle, file_get_contents($original_path));
fclose($handle);
if (filesize($temp_location) < 1024000){
rename($temp_location, 'xxx');
}
$limit = 1024; //1KB
$fr = fopen($filePath, 'r');
$limitedContent = fread($fr, $limit);
$fw = fopen($filePath, 'w');
fwrite($fw, $limitedContent);
最初にファイルサイズを見つけてからコピーを実行するというアイデアをいじくりまわしました。
<?php
if (false !== ($f = fopen($url, 'rb'))) {
// read the meta data from the file, which contains the response headers
$d = stream_get_meta_data($f);
// find the Content-Length header
if ($headers = preg_grep('/^Content-Length: /i', $d['wrapper_data'])) {
$size = substr(end($headers), 16);
// if the size is okay, open the destination stream
if ($size <= 10000 && false !== ($o = fopen('destination.jpg', 'wb'))) {
// and perform the copy
stream_copy_to_stream($f, $o);
fclose($o);
}
}
fclose($f);
}
警告
Content-Length
サーバーがヘッダーを返さない場合は機能しません。これは、対処する必要があるかもしれない可能性です。