1

copy()URLからサーバーに画像を保存するためにPHP関数を使用するスクリプトを使用しています。copy('http://si.com/guitar.jpg', 'guitar1213.jpg')

私が疑問に思っているのは、この関数を呼び出すときに最大ファイルサイズ制限を簡単に設定できる方法があるかどうかです。それとも.htaccess、これをすばやく修正する唯一のオプションですか?

前もって感謝します

4

3 に答える 3

1

ファイルがサーバー上にある場合にのみファイルサイズを取得できます。ファイルを一時フォルダーにダウンロードすることをお勧めします。そうすれば、ファイルサイズを簡単に確認して、要件を満たしている場合は正しい場所に移動できます。

$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');
}
于 2012-09-26T14:00:51.957 に答える
1
$limit = 1024; //1KB
$fr = fopen($filePath, 'r');
$limitedContent = fread($fr, $limit);
$fw = fopen($filePath, 'w');
fwrite($fw, $limitedContent);

PHPAPIを確認してください

于 2012-09-26T14:03:10.990 に答える
0

最初にファイルサイズを見つけてからコピーを実行するというアイデアをいじくりまわしました。

<?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サーバーがヘッダーを返さない場合は機能しません。これは、対処する必要があるかもしれない可能性です。

于 2012-09-26T14:22:04.850 に答える