我在以下位置有一个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中都能正常工作。
此致 大额牛
答案 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,它不会受到伤害。