proc_open工作目录

I have a PHP script at the following location C:\wamp\www\tcl\bin\

I am accessing the same through a browser (http://localhost/tcl/bin/xxx.php

In the PHP script . I am doing a proc_open

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

if i give the full path it works , but if I just give tclsh84.exe it does not work . Although the PHP manual states if you don't give 4th parameter of proc_open (CWD) it takes the directory of the currently executing process.

Can someone guide me as I can't hardcode the tcl executable path as this needs to work both in windows and linux .

Regards, Mithun

You say it works if you use the full path to tclsh84.exe. So, a solution might be to find out that full path and use it in your call to proc_open.


If you know your tclsh84.exe is in the directory in which your PHP script is, you could use something based on dirname and __FILE__ ; a bit like this, I suppose :

$dir = dirname(__FILE__);
var_dump($dir);   // directory in which the current PHP script is in

$path = $dir . DIRECTORY_SEPARATOR . 'tclsh84.exe';
var_dump($path);

Considering the PHP script I am using is /home/squale/developpement/tests/temp/temp.php, I would get :

string '/home/squale/developpement/tests/temp' (length=37)
string '/home/squale/developpement/tests/temp/tclsh84.exe' (length=49)

And, if needed, you can use '..' to go up in the directories tree, and, then use directories names to go down.


Another solution might be to make sure that the program you are trying to execute is in your PATH environment variables -- but if it's a program that's used only by your application, it doesn't make much sense to modify your PATH, I guess...

I believe by the executing process it means you PHP path, not the script path. Otherwise you can use a define in config file, it won't hurt.