Вы говорите, что это работает, если вы используете полный путь к tclsh84.exe
. Таким образом, решение может состоять в том, чтобы найти этот полный путь и использовать его при вызове proc_open .
Если вы знаете, что ваш tclsh84.exe
находится в каталоге, в котором находится ваш PHP-скрипт, вы можете использовать что-то на основе dirname
и __FILE__
; немного так, я полагаю:
$dir = dirname(__FILE__);
var_dump($dir); // directory in which the current PHP script is in
$path = $dir . DIRECTORY_SEPARATOR . 'tclsh84.exe';
var_dump($path);
Учитывая, что PHP-скрипт, который я использую, это /home/squale/developpement/tests/temp/temp.php
, я бы получил:
string '/home/squale/developpement/tests/temp' (length=37)
string '/home/squale/developpement/tests/temp/tclsh84.exe' (length=49)
И, при необходимости, вы можете использовать '..
' для перехода вверх по дереву каталогов, а затем использовать имена каталогов для перехода вниз.
Другое решение может заключаться в том, чтобы убедиться, что программа, которую вы пытаетесь выполнить, находится в переменных окружения PATH - но если это программа, которая используется только вашим приложением, то, думаю, нет смысла изменять ваш PATH. ..