3

我有一个 php 脚本,需要在由单独的 php 脚本操作后确定文件系统上文件的大小。

例如,存在一个大小固定的 zip 文件,但会根据尝试访问它的用户将一个未知大小的附加文件插入其中。因此,提供文件的页面类似于 getfile.php?userid=1234。

到目前为止,我知道这一点:

filesize('getfile.php'); //returns the actual file size of the php file, not the result of script execution

readfile('getfile.php'); //same as filesize()

filesize('getfile.php?userid=1234'); //returns false, as it can't find the file matching the name with GET vars attached

readfile('getfile.php?userid=1234'); //same as filesize()

有没有办法读取 php 脚本的结果大小而不仅仅是 php 文件本身?

4

5 回答 5

1

文件大小

从 PHP 5.0.0 开始,这个函数也可以与一些 URL 包装器一起使用。

就像是

filesize('http://localhost/getfile.php?userid=1234');

应该够了

于 2012-12-27T15:39:17.377 回答
1

有人发布了使用 curl 执行此操作的选项,但在否决后删除了他们的答案。太糟糕了,因为这是我让它工作的一种方式。所以这是他们对我有用的答案:

$ch = curl_init('http://localhost/getfile.php?userid=1234');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //This was not part of the poster's answer, but I needed to add it to prevent the file being read from outputting with the requesting script
curl_exec($ch);

$size = 0;

if(!curl_errno($ch))
{
    $info = curl_getinfo($ch);
    $size = $info['size_download'];
}

curl_close($ch);

echo $size;
于 2012-12-27T16:50:29.933 回答
0

获得输出大小的唯一方法是运行它然后查看。根据脚本的不同,结果可能会有所不同,但对于实际使用,最好的办法是根据您的知识进行估计。即,如果您有一个 5MB 的文件并添加另一个 5k 用户特定的内容,它最终仍然是大约 5MB 等等。

于 2012-12-27T15:40:45.960 回答
0

扩展伊万的答案:

您的字符串是带有或不带有 GET 参数的“getfile.php”,这被视为本地文件,因此检索 php 文件本身的文件大小。

它被视为本地文件,因为它不是以 http 协议开头的。有关支持的协议,请参阅http://us1.php.net/manual/en/wrappers.php 。

于 2012-12-27T15:41:04.777 回答
0

使用 filesize() 时出现警告:Warning: filesize() [function.filesize]: stat failed for ... link ... in .. file ... on line 233

而不是 filesize() 我找到了两个工作选项来替换它:

1) $headers = get_headers($pdfULR, 1); $fileSize = $headers['Content-Length']; 回声$文件大小;

2) 回声 strlen(file_get_contents($pdfULR));

现在它工作正常。

于 2013-06-13T06:26:56.730 回答