更新
我的目录结构如下
http://domainname.com/developer/clientName/ppt/phantom/ // inside this phantom folder, all files are present
在与 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
==================================================== =================================
概括
我正在尝试在我的服务器上执行二进制文件。调用二进制文件phantomJS
,主要用于创建网页的屏幕截图。
我登录到我的 cPanel 并找到有关我的服务器的以下信息:
Operating system : Linux
Architecture : i686
所以我继续phantomjs-1.9.0-linux-i686.tar.bz2
从 phantomJS 网站下载。我上传了phantomjs
位于bin
下载文件夹内的文件(我刚刚上传了一个名为 的文件,phantomjs
大小约为 38 MB。我假设我不需要下载附带的任何其他文件。那里是一个examples
文件夹和一些ReadMe
s和其他.txt
文件)
我还将另外三个文件上传到存在的同一文件夹中phantomjs
:
test.php
(这是将在浏览器中执行的主文件)test.js
(其中包含启动 phantomjs 的代码)createScreenshot.php
(其中包含输出一些 HTML 的代码)
所以所有文件都在同一个文件夹中。因此,不应该因为路径错误而出现问题。
测试.php
exec('phantomjs test.js');
测试.js
var page = require('webpage').create();
var url = 'createScreenshot.php';
page.open(url, function (status) {
page.render('test.png');
phantom.exit();
});
创建屏幕截图.php
echo '<h1>This should be converted to an image</h1>';
问题
现在,当我浏览到 时www.mydomain.com/test/test.php
,我得到的只是一个空白页,这很好,因为唯一应该发生的是在test
文件夹中创建图像,但这永远不会发生。没有错误被输出。我也试过把error_reporting(E_ALL)
inside test.php
,但仍然没有显示错误,只是一个空白页。
调试
我决定测试是否exec
在我的服务器上启用。我这样做是通过使用
echo exec('whoami');
这打印出我的 cPanel 用户名。所以这个方法exec
是有效的。
我做的下一件事是检查文件夹权限。test
文件夹有755
权限,所以也有phantomjs
。我尝试将两者都更改为,777
但这也无济于事。
这让我相信phantomjs
文件有问题。我不知道下一步该尝试什么。我确信我从 phantomJS 网站 ( phantomjs-1.9.0-linux-i686.tar.bz2
) 下载了正确的包。
我还能做些什么来调试这个问题吗?
更多调试
跑步
echo exec("ls -lh");
打印出来
-rw-r--r-- 1 abc abc 1.8K Apr 6 05:15 third-party.txt
这third-party.txt
是在保存phantomjs
二进制文件的文件夹中,但我想知道为什么只打印了一个文件名。php 和 js 文件也与third-party.txt
. 不过,在上面的输出中并不确定1
代表什么。