在调试框架中的问题时,我在使用tempnam()
创建复制文件的目标时遇到了一些奇怪的行为.
这是一个简化的测试用例:
touch ('/tmp/file.txt');
file_put_contents('/tmp/file.txt', 'test');
$dst = tempnam('/tmp', 'dst');
copy('/tmp/file.txt', $dst);
var_dump(filesize($dst));
Run Code Online (Sandbox Code Playgroud)
显然,我希望var_dump()
最后输出"4",因为这是源文件的大小,但相反,它总是返回到零,这意味着目标文件为空,尽管copy()
返回true.我在PHP 5.4.4和5.3.10上进行了测试,结果相同.
我知道我可以改变我的代码使用fwrite()
或类似的构造,但我真的想知道的是,为什么它不像我写的那样工作?
更新
看来这实际上是一个PHP错误,clearstatcache()
之前调用filesize()
产生了正确的结果,所以实际上副本是成功的,不管怎样,这filesize()
就是说谎.请参阅https://bugs.php.net/bug.php?id=65701和https://github.com/php/php-src/pull/459
看来这实际上是一个 PHP 错误,在 filesize() 产生正确结果之前调用clearstatcache(),所以事实上无论哪种方式复制都是成功的,是 filesize() 在撒谎。请参阅https://bugs.php.net/bug.php?id=65701和https://github.com/php/php-src/pull/459
归档时间: |
|
查看次数: |
267 次 |
最近记录: |