【问题标题】:PHP script can't open a file when called from a perl script从 perl 脚本调用 PHP 脚本时无法打开文件
【发布时间】:2010-07-01 19:43:46
【问题描述】:

我有一个有趣的情况,我有一个 perl 监视脚本(使用 Linux::Inotify2)监视要放在某个目录中的文件,然后将它们交给 PHP 脚本进行处理。被监视的目录和其中的文件不属于运行监视脚本的用户,但是文件被转储到的整个目录树是 rwxr-xr-x 并且文件是世界可读的。

这是我的两难境地。当使用 system()、exec() 或``从 perl 脚本调用时,PHP 脚本无法打开传递给它的文件的文件句柄。但是,当使用同一有效用户从命令行手动运行脚本时,PHP 脚本可以打开 same 文件上的文件句柄。

有人知道为什么会这样吗?

【问题讨论】:

  • 你传递的是句柄还是文件名?从问题中不清楚。
  • 你得到什么错误信息?
  • 我没有收到任何错误,PHP 子外壳返回没有错误。正如我在下面对答案的评论中提到的,PHP 脚本可以看到该文件存在,但无法在其上打开文件句柄。同样,从命令行运行 PHP 脚本:/usr/bin/php script.php 文件名可以正常工作,并且脚本可以打开文件“文件名”的句柄。但是在 perl 脚本中执行相同的操作: system("/usr/bin/php script.php filename") 会导致 PHP 脚本无法打开文件 'filename' 的句柄。
  • 所以,在回答我自己的问题时,这似乎是一种竞争条件,perl 在文件完成传输到目录之前触发系统调用,而不是与系统调用本身。使用 Linux::Inotify2 和 IN_CREATE 的用户请注意,您需要在检查事件时添加 sleep 语句以允许文件传输/复制在尝试处理文件之前完成。

标签: php perl


【解决方案1】:

您的 fopen() 调用可能依赖于在工作目录更改时中断的相对路径。

【讨论】:

  • 我正在传递文件名,并且绝对路径预先添加到 PHP 文件中。 PHP 文件可以准确地确定传递的文件存在,但无法在其上打开文件句柄。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-23
  • 1970-01-01
  • 2012-07-23
相关资源
最近更新 更多