更新
我的目录结构如下
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文件夹和一些ReadMes和其他.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代表什么。