我的网站托管在共享服务器上,所以我没有su访问权限。我需要用java运行一段代码,但它在服务器上不可用。所以我得到了一个java的自解压版本并将其放在我主目录的服务器上。然后我给了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
添加任何内容,没有给出输出,并且该命令返回了一个成功的退出值。只是服务器的限制阻止了我的工作吗?
答案 0 :(得分:1)
首先,这不会起作用。
exec('export PATH='.$bin_path.':$PATH', $output, $return);
它将使用shell启动子进程,在shell中运行export
命令,然后shell将退出。但export
命令仅更改该shell的$PATH
。
我不确定,但我怀疑你需要使用putenv
。
我希望如果我可以将绝对/路径/添加到/ PAT / bin到$ PATH,那么这个问题就会得到解决。
嗯,只有使用简单的命令名来调用java
命令才能提供帮助。
使用完整的绝对路径名运行java
会更简单;例如"/absolute/path/to/java/bin/java"