通过PHP的exec在Linux Web服务器上执行二进制文件

asp*_*rin 0 php linux exec

UPDATE

我的目录结构如下

http://domainname.com/developer/clientName/ppt/phantom/    // inside this phantom folder, all files are present
Run Code Online (Sandbox Code Playgroud)

在与Bass Jobsen聊天并查看了服务器错误日志后,我发现它列在日志中

[Tue Apr 23 08:31:34 2013] [error] [client xxx.xxx.xx.xxx] sh: line 1: 29443 
Segmentation fault /home/xyz/public_html/developer/clientName/ppt/phantom/phantomjs --version 2>&1
Run Code Online (Sandbox Code Playgroud)

================================================== ================================

摘要

我正在尝试在我的服务器上执行二进制文件.调用二进制文件phantomJS,主要用于创建网页的屏幕截图.

我登录了我的cPanel,发现了有关我的服务器的以下信息:

Operating system : Linux
Architecture     : i686
Run Code Online (Sandbox Code Playgroud)

所以我继续phantomjs-1.9.0-linux-i686.tar.bz2从phantomJS网站下载.我上传了phantomjs位于bin下载文件夹内的文件(我刚上传了一个名为的文件,phantomjs大小约为38 MB.我假设我不需要下载附带的任何其他文件.是一个examples文件夹和一些ReadMes和其他.txt文件)

我还将另外三个文件上传到了相同的文件夹中phantomjs:

  1. test.php (这是将在浏览器中执行的主文件)
  2. test.js (其中包含启动phantomjs的代码)
  3. createScreenshot.php (包含输出一些HTML的代码)

所以所有文件都在同一个文件夹中.因此,不应该由于错误的路径而产生问题.

test.php的

exec('phantomjs test.js');
Run Code Online (Sandbox Code Playgroud)

test.js

var page = require('webpage').create();
var url = 'createScreenshot.php';
page.open(url, function (status) {
    page.render('test.png');
    phantom.exit();
});
Run Code Online (Sandbox Code Playgroud)

createScreenshot.php

echo '<h1>This should be converted to an image</h1>';
Run Code Online (Sandbox Code Playgroud)

问题

现在,当我浏览时www.mydomain.com/test/test.php,我得到的只是一个空白页面,这很好,因为唯一应该发生的是在test文件夹中创建一个图像,但这种情况从未发生过.没有错误输出.我也尝试过放入error_reporting(E_ALL)内部test.php,但仍然没有显示错误,只是一个空白页面.

调试

我决定测试exec我的服务器上是否完全启用了.我这样做是通过使用

echo exec('whoami');
Run Code Online (Sandbox Code Playgroud)

这打印出我的cPanel用户名.所以这意味着exec工作.

我接下来要做的是检查文件夹权限.test文件夹有755权限,所以phantomjs.我尝试改变两者,777但也没有帮助.

这让我相信phantomjs文件有问题.我不知道下一步该尝试什么.我确定认为我从phantomJS网站(phantomjs-1.9.0-linux-i686.tar.bz2)下载了正确的软件包.

我还能做些什么来调试这个问题吗?

更多调试

运行

echo exec("ls -lh");
Run Code Online (Sandbox Code Playgroud)

打印出来

-rw-r--r-- 1 abc abc 1.8K Apr 6 05:15 third-party.txt
Run Code Online (Sandbox Code Playgroud)

这third-party.txt是在包含phantomjs二进制文件的文件夹中,但我想知道为什么只打印了一个文件名.在同一个文件夹中也有php和js文件third-party.txt.1虽然不太确定在上面的输出中代表.

uın*_*ɐɥs 6

如果通过FTP上载二进制文件,由于FTP客户端更改文件内的行结尾,它可能会损坏.

要解决此问题,请将传输模式更改为二进制(在FileZilla中:传输 - >传输类型 - >二进制).

[资源]