我正在使用一个脚本,我使用 PHP 函数copy()
将图像从 URL 保存到我的服务器:copy('http://si.com/guitar.jpg', 'guitar1213.jpg')
我想知道是否有任何方法可以在调用此函数时简单地设置最大文件大小限制?或者真的是.htaccess
我快速解决这个问题的唯一选择吗?
提前致谢
$limit = 1024; //1KB
$fr = fopen($filePath, 'r');
$limitedContent = fread($fr, $limit);
$fw = fopen($filePath, 'w');
fwrite($fw, $limitedContent);
一旦文件在您的服务器上,您只能获取文件大小,我建议将文件下载到临时文件夹,然后您可以轻松检查文件大小并在符合要求的情况下移动到正确的位置。
$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');
}
玩弄了先找到文件大小然后执行复制的想法:
<?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
标头,它将不起作用;这是一种可能需要处理的可能性。