确保使用flock()锁定流只能在什么情况下工作? - php

这是PHP zend考试的一个问题,

确保使用flock()锁定流只能在什么情况下工作?

在Linux环境中在本地文件系统中运行时
访问本地文件系统的流时
在Windows环境中运行并访问共享时
访问双向流时
访问只读流时

参考方案

流具有this set of operations – writereadcloseflush(必选,即使没有操作也是如此)和seekcaststatset_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�…