PHP copy() - 设置文件大小限制?

时间:2012-09-26 13:56:04

标签: php file copy

我正在使用一个脚本,我使用PHP函数copy()将图像从URL保存到我的服务器:copy('http://si.com/guitar.jpg', 'guitar1213.jpg')

我想知道的是,在调用此函数时,我是否可以简单地设置最大文件大小限制?或者真的.htaccess我唯一的选择是快速解决这个问题吗?

提前致谢

3 个答案:

答案 0 :(得分:1)

一旦文件在服务器上,您只能获取文件大小,我建议将文件下载到临时文件夹,然后您可以轻松检查文件大小,并在符合要求时移动到正确的位置。 / p>

$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');
}

答案 1 :(得分:1)

$limit = 1024; //1KB
$fr = fopen($filePath, 'r');
$limitedContent = fread($fr, $limit);
$fw = fopen($filePath, 'w');
fwrite($fw, $limitedContent);

check PHP API

答案 2 :(得分: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标头,它将无法工作;这是一种可能需要处理的可能性。