我有 2 个简短的脚本。第一个是 awk 脚本,处理一个大文件并打印到命名管道“myfifo.dat”。第二个是 Perl 脚本,它运行一个LOAD DATA LOCAL INFILE 'myfifo.dat'...
命令。这两个脚本在本地运行时都可以工作,如下所示:
lee.awk big.file &
lee.pl
但是,当我从 PHP 网页调用这些脚本时,命名管道会阻塞:
$awk="/path/to/lee.awk {$_FILES['uploadfile']['tmp_name']} &";
$sql="/path/to/lee.pl";
if(!exec($awk,$return,$err)) throw new ZException(print_r($err,true)); //blocks here
if(!exec($sql,$return,$err)) throw new ZException(print_r($err,true));
如果我修改 awk 和 Perl 脚本,以便它们写入和读取普通文件,那么 PHP 一切正常。fifo 和普通文件的权限为 666(用于测试目的)。这些操作通过命名管道运行得更快,所以我更喜欢使用一个。任何想法如何解锁它?
附言。如果您想知道为什么我要让所有这些恶化,请参阅这个 SO question。