2 つの短いスクリプトがあります。最初の awk スクリプトは、大きなファイルを処理し、名前付きパイプ 'myfifo.dat' に出力します。2 番目の Perl スクリプトは、LOAD DATA LOCAL INFILE 'myfifo.dat'...
コマンドを実行します。これらのスクリプトは両方とも、次のようにローカルで実行すると機能します。
lee.awk big.file &
lee.pl
ただし、これらのスクリプトを PHP Web ページから呼び出すと、名前付きパイプがブロックされます。
$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 です (テスト用)。これらの操作は、名前付きパイプを介してはるかに高速に実行されるため、名前付きパイプを使用することをお勧めします。ブロックを解除する方法はありますか?
ps。なぜ私がこのすべての悪化に行くのか疑問に思っている場合は、この SO の質問を参照してください。