我想为我的网站构建备份应用程序,并且作为其中的一部分,我想在后台启动PHP脚本。这样我就不必担心它会超时。奇怪的部分是,它在我的本地计算机上工作正常,但是当我将它复制到我的Hostgator网站时,它变得疯狂。无法启动PHP后台脚本
我拼凑起来的一个简单的例子...
首先,我创建了一个简单的PHP脚本:
<?php
echo 'Current PHP version: ' . phpversion() . "\n";
echo 'Now: '. date('Y-m-d') ."\n";
echo "This is created by phpbg-back.php\n\n";
echo "Current file: " . __FILE__;
?>
我可以SSH'ing到我的主机和运行这个运行该脚本命令:
# php phpbg-back.php
Current PHP version: 5.4.36
Now: 2015-01-16
This is created by phpbg-back.php
....
所以,脚本似乎工作正常。现在,我创建了一个网页,将启动脚本作为后台进程:
<?php
if(isset($_GET["schedule"])) { ?>
<html>
<head>
<title>Scheduling PHP Process</title>
</head>
<body>
<h1>Schedule....</h1>
<p>We are scheduling the process right now. Here is the output:</p>
<pre><?php
$command = "php phpbg-back.php > phpbg-out.txt 2>&1 &";
echo "Command: " . $command . "\n";
echo shell_exec($command);
?></pre>
<a href="phpbg-front.php">Go back to the front page and check the output</a>
</body>
</html>
<?php
} else {
echo "Invalid -- the page should have the schedule parameter set.\n\n";
echo "Current file: " . __FILE__;
}
?>
最后,我创建了一个漂亮的头版,应该是能够查看输出:
的问题是当脚本贯穿这个页面时,它似乎完全忽略了我传递给它的脚本。它运行当前的PHP页面。因此,输出看起来更像这个(phpbg-out.txt):
Content-type: text/html^M
^M
<html>
<head>
<title>Scheduling PHP Process</title>
</head>
<body>
<h1>Schedule....</h1>
<p>We are scheduling the process right now. Here is the output:</p>
<pre>Command: php phpbg-back.php > phpbg-out.txt 2>&1 &
</pre>
<a href="phpbg-front.php">Go back to the front page and check the output</a>
</body>
</html>
我已经试过各种事情来得到它的工作。我试图在命令前添加bash -c。我使用-f开关来选择PHP脚本。我不知道还有什么可以尝试的。
您是否有权执行此任务/操作?根或共享服务器? –
尝试'php phpb-back.php 2>&1 >> phpbg-out.txt'来查看'shell_exec'返回的信息。 – jsxqf
@TopQuestions至于权限,它似乎允许我执行像tar或cp这样的shell命令。我有SSH访问服务器。这是一个共享服务器,所以我没有root权限。 – digitaleagle