Php is_readable()仅当在会话开始前至少调用一次时才返回true
我的一个PHP服务器上有一些奇怪的东西。其他服务器表现出不同的行为。但我不认为这是由环境造成的 我开始相信这是一个错误。有人听说过这个吗Php is_readable()仅当在会话开始前至少调用一次时才返回true,php,Php,我的一个PHP服务器上有一些奇怪的东西。其他服务器表现出不同的行为。但我不认为这是由环境造成的 我开始相信这是一个错误。有人听说过这个吗 is_readable()只会返回true,如果您在启动会话之前至少调用它一次 如果首先启动会话,则所有都是可读的()调用返回false。尽管您仍然可以使用readfile()读取文件 <?php // do session_start() to here and you will get BadBad error_reporting(E_ALL);
is_readable()
只会返回true,如果您在启动会话之前至少调用它一次
如果首先启动会话,则所有都是可读的()
调用返回false。尽管您仍然可以使用readfile()
读取文件
<?php
// do session_start() to here and you will get BadBad
error_reporting(E_ALL);
ini_set('display_errors',1);
ini_set('display_startup_errors',1);
ob_start();
// or do session_start() here and you will also get BadBad
echo is_readable("foo.bar") ? "Good" : "Bad";
// But do session_start() here and you get GoodGood
echo is_readable("foo.bar") ? "Good" : "Bad";
// or even do it here and you will still get GoodGood
echo @++$_SESSION['counter']; // incrementing number always follow GoodGood or BadBad
readfile("foo.bar"); // the contents also always follow GoodGood or BadBad
?>
递增的数字始终显示,因此会话工作正常
此外,文件内容始终显示,因此文件是可读的
我正在Windows Server 2012上运行32位PHP版本5.3.26,使用IIS 7.5运行64位
可能是什么?试试clearstatcache()。由于您测试的是同一个文件,您只需在第二次调用和后续调用中读取缓存项。解决此问题的方法完全不同-我使用
SplFileInfo
和SPLFileObject
例程处理所有“这些类型的文件查询”,因为我怀疑它们需要正常工作?@MarcB我尝试将clearstatcache()
在任何地方之间,但它不会改变任何东西。如果session\u start()
是第一个,输出是坏的。如果是可读的()
是第一个,输出是好的。输出从来都不是坏的。@RyanVincent是的,SplFileInfo::openFile()
和SplFileInfo::isReadable()
按预期工作。与之不同,是可读的()
在这台机器上不正确。但这还不能为我解释。我怀疑你在PHP上遇到了一个“错误”。我理解这是多么令人沮丧和“浪费时间”。我在“Windows”上开发,在“linux”上部署。和你一样,我需要在两种环境下都能正常工作的“文件查询”例程。因此我使用了SplFile的例程。它们工作可靠。