proc_open工作目录

时间:2009-10-12 05:03:03

标签: php

我在以下位置有一个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手册说明如果不提供proc_open(CWD)的第4个参数,它将获取当前正在执行的进程的目录。

有人可以指导我,因为我无法对tcl可执行路径进行硬编码,因为这需要在Windows和Linux中都能正常工作。

此致 大额牛

2 个答案:

答案 0 :(得分:1)

如果您使用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没有多大意义。 ..

答案 1 :(得分:0)

我相信在执行过程中它意味着你的PHP路径,而不是脚本路径。否则你可以在配置文件中使用define,它不会受到伤害。