我的站点托管在共享服务器上,因此我没有 su 访问权限。我需要用 java 运行一段代码,但它在服务器上不可用。所以我弄了一个自解压版的java,放到服务器上我的home目录下。然后我给了 java 可执行权限并尝试运行代码。由于服务器的限制,我在运行文件时必须使用相对路径。
尝试运行 java 文件 ../java/bin/java -jar 'javafile.jar'
给我以下内容:
error while loading shared libraries: libjli.so: cannot open shared object file: No such file or directory
我看了看 libjli.so
位于 ../java/lib/i386/jli/libjli.so
。所以我在想,因为我正在使用相对路径运行 java,所以它并不完全知道如何查找其他文件。我希望如果我可以将 absolute/path/to/java/bin
添加到 $PATH
那么这个问题就会得到解决。
因此,一旦我运行了我的 PHP,我就可以使用 dirname(__FILE__)
来获取我的 java bin 目录的完整路径。我尝试了以下代码:
exec('export PATH='.$bin_path.':$PATH', $output, $return);
print_r(array(getenv('PATH'), $output, $return));
Prints:
Array(
[0] => /usr/local/admin/bin:/usr/local/admin/bin/servers:/sbin:/usr/sbin:/usr/local/sbin:/usr/local/bin:/bin:/usr/bin,
[1] => Array(),
[2] => 0
)
因此,$PATH
中没有添加任何内容,没有给出任何输出,命令返回了一个成功的退出值。是否只是服务器的限制导致我无法正常工作?
最佳答案
首先,这是行不通的。
exec('export PATH='.$bin_path.':$PATH', $output, $return);
它会用shell启动一个子进程,在shell中运行export
命令,然后shell就会退出。但是 export
命令只会更改该 shell 的 $PATH
。
我不确定,但我怀疑您需要使用 putenv
。
I'm hoping that if I can add absolute/path/to/java/bin to $PATH then this issue will be resolved.
好吧,只有当您使用简单的命令名称来调用 java
命令时,它才会有所帮助。
而且使用完整的绝对路径名运行 java
会更简单;例如"/absolute/path/to/java/bin/java"
关于java - 如何使用 PHP 设置 $PATH?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22538677/