【发布时间】:2014-04-27 15:14:21
【问题描述】:
我的网站托管在共享服务器上,因此我没有 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 添加任何内容,没有给出任何输出,并且该命令返回了一个成功的退出值。只是服务器的限制阻止我正常工作吗?
【问题讨论】:
-
试试
dirname(realpath(__FILE__)) -
@CianGallagher -
dirname(__FILE__)给出与dirname(realpath(__FILE__))相同的结果 =( -
这很可能是因为您可能无权访问
exec()或shell_exec()。出于安全原因,99% 的共享主机提供商不会让您访问其中任何一个功能。如果你想访问我会考虑获得一个 VPS。我使用的最好的服务是亚马逊 AWS,他们有一个免费套餐,你可以在这里使用:aws.amazon.com/free -
除此之外,我永远不会相信共享托管服务提供商可以让您访问这些功能......
-
@CianGallagher - 我同意。我计划在网站投入生产后搬到亚马逊。不过在这里开发对我来说更便宜。 =)