这是PHP zend考试的一个问题,
确保使用flock()锁定流只能在什么情况下工作?
在Linux环境中在本地文件系统中运行时
访问本地文件系统的流时
在Windows环境中运行并访问共享时
访问双向流时
访问只读流时
参考方案
流具有this set of operations – write
,read
,close
,flush
(必选,即使没有操作也是如此)和seek
,cast
,stat
,set_option
(可选) )。当您请求文件锁定时,set_option
操作为called。
只是从这里,您可以看到双向或只读与此无关。一个人可以实现一个任意包装器,使写入和读取具有一定效果,但是却不实现set_option
,因为它是可选的。同样,可以实现无操作write
操作,但仍可以在我的set_option
实现中处理文件锁。在Linux环境中运行也无关紧要,因为重要的是流支持的内容。
(注意:我不确定“在Linux环境中本地文件系统中运行”是什么意思。我承认它的意思是“从Linux环境中本地文件系统中运行PHP”,而不是“从Linux中AFS文件系统中运行PHP”。如果表示“正在访问在Linux环境中支持本地fileyste的流”,则这可能是正确的答案(考虑到以下所述的手动警告)。
其余问题涉及STDIO流。现在,当检查流是否支持stream_supports_lock
阻塞时,PHP实际上并没有尝试使用flock,而是将set_option
操作传递给一个特殊值,该值查询“此流是否支持文件锁定”? STDIO流操作always responds it does,因此似乎剩下的两个答案都是正确的。
但是,set_option
操作声称它支持文件锁定的事实并没有使它成立。当您实际尝试获取锁时,请输入it may fail。那么什么时候可以保证工作呢?当然不是Windows共享,因为几乎任何东西都可以支持这些共享。我们只剩下“在本地文件系统上”。所以答案是,通过消除
访问本地文件系统的流时
但是,请注意(已过时)warning in the manual:
flock()在陈旧的文件系统(如FAT及其派生文件)上不受支持,因此在此[sic]环境中始终会返回FALSE(对于Windows 98用户尤其如此)。
PHP getallheaders替代 - php我正在尝试从服务器上的apache切换到nginx。唯一的问题是我在PHP脚本中使用的getallheaders()函数,该函数不适用于Nginx。我已经尝试过用户在getallheaders函数上的php站点上提供的注释,但这并不返回所有请求标头。请告诉我如何解决这个问题。我真的想切换到Nginx。 参考方案 您仍然可以使用它,但是您必须像这里一样重新定义…
php Singleton类实例将在多个会话中保留吗? - php举一个简单的例子,如果我想计算一个不使用磁盘存储的脚本的命中次数,我可以使用静态类成员来执行此操作吗?用户1:<?php $test = Example::singleton(); $test->visits++; ?> 用户2:<?php $test = Example::singleton(); $test->visits+…
PHP:将字符串拆分为字母和数字部分的最佳方法 - php我有几个格式的字符串AA11 AAAAAA1111111 AA1111111 分离字符串的字母和数字部分的最佳方法(最有效)? 参考方案 如果它们都是一系列字母,然后是一系列数字,并且没有非字母数字字符,那么sscanf()可能比regexp更有效$example = 'AAA11111'; list($alpha,$numeric) =…
php-casperjs获取内部文本 - php我正在为casperjs使用php包装器-https://github.com/alwex/php-casperjs我正在网上自动化一些重复的工作,我需要访问一个项目的innerText,但是我尚不清楚如何从casperjs浏览器访问dom。我认为在js中我会var arr = document.querySelector('label.input…
PHP strtotime困境 - php有人可以解释为什么这在我的服务器上输出为true吗?date_default_timezone_set('Europe/Bucharest'); var_dump( strtotime('29.03.2015 03:00', time()) === strtotime('29.03.2015 04:00…