动态选择文件的PHP文件大小

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

例如,存在一个zip文件,该文件具有固定大小,但根据尝试访问它的用户,会获得插入其中的未知大小的其他文件。 所以提供文件的页面就像getfile.php?userid = 1234。</ p>

到目前为止,我知道这一点:</ p>

  文件大小( 'getfile.php');  //返回php文件的实际文件大小,而不是脚本执行的结果

readfile('getfile.php'); //与filesize()相同

filesize('getfile.php?userid = 1234'); //返回false,因为它无法找到与附加的GET变量匹配的文件

readfile('getfile.php?userid = 1234'); //与filesize()
</ code>相同</ pre>

有没有办法读取php脚本的结果大小而不仅仅是php文件本身?</ p> \ n </ div>

展开原文

原文

I have a php script that needs to determine the size of a file on the file system after being manipulated by a separate php script.

For example, there exists a zip file that has a fixed size but gets an additional file of unknown size inserted into it based on the user that tries to access it. So the page that's serving the file is something like getfile.php?userid=1234.

So far, I know this:

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()

Is there a way to read the result size of the php script instead of just the php file itself?

dtrj21373
dtrj21373 由于getfile.php不返​​回结果文件,但是在服务器上创建并销毁它,使用curl或以其他方式获取getfile.php的建议不会起作用(它们将返回php文件的大小,或者它的stdout)。您需要检查文件大小是否存在或尝试分析脚本(这可能无法以编程方式进行,因为PHP已完成)。
接近 8 年之前 回复
duanji8887
duanji8887 愚蠢的问题:为什么你不能只在getfile.php中添加代码来检查并记录文件大小,然后再删除它?
接近 8 年之前 回复
duanning9110
duanning9110 getfile.php创建临时文件,输出该文件,然后删除临时文件,因此一旦请求脚本获得结果,文件系统上不再存在输出的实际文件。
接近 8 年之前 回复
douxiyi2418
douxiyi2418 getfile.php是否输出文件或文件本身的路径?
接近 8 年之前 回复
dongping4273
dongping4273 如果您无法知道文件名,那么事情就变得棘手了。您可能我可以查找最新文件,这可能适合您的情况。
接近 8 年之前 回复
duanhuoyao7011
duanhuoyao7011 我想,如果我能够正确理解你的问题,你可以在你使用的脚本中使用AJAX来确定文件的大小。
接近 8 年之前 回复
dongzhuo7291
dongzhuo7291 我也想知道这一点,我觉得它不是,或者比上面的代码更复杂。
接近 8 年之前 回复

5个回答



有人发布了使用curl执行此操作的选项,但在downvote之后删除了他们的答案。 太糟糕了,因为这是我开始工作的一种方式。 所以这里的答案对我有用:</ p>

  $ ch = curl_init('http://localhost/getfile.php?userid = 1234'); 
curl_setopt($ ch ,CURLOPT_RETURNTRANSFER,true); //这不是海报答案的一部分,但是我需要添加它以防止文件被请求输出请求脚本

Nucl_exec($ ch);

$ size = 0;

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

ncurl_close($ ch);

echo $ size;
</ code> </ pre>
</ div>

展开原文

原文

Someone had posted an option for using curl to do this but removed their answer after a downvote. Too bad, because it's the one way I've gotten this to work. So here's their answer that worked for me:

$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;

drvvvuyia15070493
drvvvuyia15070493 虽然,我应该注意,如果可以的话,我会愉快地改变我的方法,因为这是非常低效的。
接近 8 年之前 回复



filesize </ p>


从PHP 5.0.0开始,此函数也可以与某些URL
包装器一起使用。</ p>
</ blockquote>

类似</ p>

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

应该足够了</ p>
</ div>

展开原文

原文

filesize

As of PHP 5.0.0, this function can also be used with some URL wrappers.

something like

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

should be enough

dongliu1883
dongliu1883 too long
接近 8 年之前 回复
douqu8828
douqu8828 虽然这对于实际目的来说几乎不可用。 OP可能希望在下载之前显示用户的文件大小。 这个调用的作用是启动Web请求,执行脚本并生成下载文件,然后将下载文件传输到内存中并获取大小。 这真的很贵。
接近 8 年之前 回复



获取输出大小的唯一方法是运行它然后查看。 根据脚本的不同,结果可能会有所不同,但在实际应用中,最好的办法是根据您的知识进行估算。 即如果你有一个5MB的文件并添加另外5k个用户特定的内容,那么最后它仍然是大约5MB。</ p>
</ div>

展开原文

原文

The only way to get the size of the output is to run it and then look. Depending on the script the result might differ though for practical use the best thing to do is to estimate basd on your knowledge. i.e. if you have a 5MB file and add another 5k user specific content it's still about 5MB in the end etc.

dongtidai6519
dongtidai6519 那么最好的事情是在脚本中生成需要大小的文件,并将生成的文件存储在某个“缓存”目录中,并在下一个请求中传递文件。 这也有一个好处,你可以将文件传递完全留给Web服务器,并且不需要PHP脚本(但你需要一些清理工作来摆脱旧文件)
接近 8 年之前 回复
dongqu5650
dongqu5650 这是一种尴尬的业务需求,但是文件大小会传递给系统的另一个组件,当它再次请求文件时,它需要一个精确的大小匹配。 关闭不太重要。
接近 8 年之前 回复



扩展Ivan的答案:</ p>

你的字符串是'getfile.php',有或没有 GET参数,这被视为本地文件,因此检索php文件本身的文件大小。</ p>

它被视为本地文件,因为它不是以 http协议。 请参见 http://us1.php.net/manual/en/wrappers.php支持的协议。</ p>
</ div>

展开原文

原文

To expand on Ivan's answer:

Your string is 'getfile.php' with or without GET parameters, this is being treated as a local file, and therefore retrieving the filesize of the php file itself.

It is being treated as a local file because it isn't starting with the http protocol. See http://us1.php.net/manual/en/wrappers.php for supported protocols.



使用filesize()时收到警告:
警告:filesize()[function.filesize]:stat失败... link </ em> ... in .. file </ em> ...第233行</ p>

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

1)
$ headers = get_headers($ pdfULR,1);
$ fileSize = $ headers ['Content-Length'];
echo $ fileSize; < / p>

2)
echo strlen(file_get_contents($ pdfULR)); </ p>

现在工作正常。</ p>
</ div>

展开原文

原文

When using filesize() I got a warning: Warning: filesize() [function.filesize]: stat failed for ...link... in ..file... on line 233

Instead of filesize() I found two working options to replace it:

1) $headers = get_headers($pdfULR, 1); $fileSize = $headers['Content-Length']; echo $fileSize;

2) echo strlen(file_get_contents($pdfULR));

Now it's working fine.

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐