У меня есть 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 .