рабочий каталог proc_open - PullRequest
       2

рабочий каталог proc_open

0 голосов
/ 12 октября 2009

У меня есть скрипт PHP в следующем месте C: \ wamp \ www \ tcl \ bin \

Я обращаюсь к нему через браузер (http://localhost/tcl/bin/xxx.php

В скрипте PHP. Я делаю proc_open

$app = 'C:/wamp/www/tcl/bin/tclsh84.exe';
$process = proc_open($app, $descriptorspec, $pipes);

если я даю полный путь, он работает, но если я просто даю tclsh84.exe, он не работает. Хотя в руководстве по PHP указано, что если вы не передадите 4-й параметр proc_open (CWD), он берет каталог текущего выполняющегося процесса.

Может кто-нибудь подсказать мне, поскольку я не могу жестко закодировать путь к исполняемому файлу tcl, так как он должен работать как в Windows, так и в Linux.

С уважением, Митхун

Ответы [ 2 ]

1 голос
/ 12 октября 2009

Вы говорите, что это работает, если вы используете полный путь к 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. ..

0 голосов
/ 12 октября 2009

Я полагаю, что при выполнении процесса это означает ваш путь к PHP, а не путь к сценарию. В противном случае вы можете использовать определение в файле конфигурации, это не повредит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...