У меня есть защищенный промежуточный сайт, доступный только через назначенные IP-адреса. Он должен иметь возможность переключать видимые URL-адреса в соответствии с реальным сайтом, поэтому я настроил простую форму, позволяющую тестировщикам переключаться между промежуточными «сайтами», редактируя файл .htaccess от их имени. Команда PHP для редактирования файла .htaccess была настроена так:
$sed_cmd = "/bin/sed -i 's/^SetEnv MAGE_RUN_CODE=.*$/SetEnv MAGE_RUN_CODE=".$run_code."/' ../.htaccess";
Команда grep, запускаемая до и после вызова этой команды, запускается, чтобы проверить ее следующим образом:
<p>Previous switch: <strong><em><?php echo `grep 'SetEnv MAGE_RUN_CODE=' ../.htaccess`; ?></strong></em></p>
<?php exec($sed_cmd, $sed_out, $sed_result); ?>
<p>Command <strong><em><?php echo $sed_cmd?></em></strong> yielded:
<br />Return: <?php echo $sed_result; ?>
<br />Printed:<strong><em><?php print_r($sed_out); ?></em></strong></p>
<p>New switch: <strong><em><?php echo `grep 'SetEnv MAGE_RUN_CODE=' ../.htaccess`; ?></strong></em></p>
Команды grep работают нормально, а копирование / вставка строки sed в командную строку также работает нормально. Однако команда sed завершается неудачно при запуске на веб-странице с помощью команды PHP exec, как указано выше, что приводит к состоянию выхода 4:
Previous switch: SetEnv MAGE_RUN_CODE=naturapet_website
Command /bin/sed -i 's/^SetEnv MAGE_RUN_CODE=.*$/SetEnv MAGE_RUN_CODE=animal_health_store_website/' ../.htaccess yielded:
Return: 4
Printed:Array ( )
New switch: SetEnv MAGE_RUN_CODE=naturapet_website
У процесса есть доступ на запись в файл, и, поскольку я не могу найти способ получить дополнительную информацию об ошибке, я озадачен.
Я знаю, что могу обойти проблему с помощью более сложного решения, используя preg_replace, но мне хотелось бы знать, почему вышеприведенный код не работает.
Может кто-нибудь сказать мне, почему sed не работает, когда вызывается в exec, как я настроил выше?