2016-09-27 62 views
0

我正在使用免费域来托管我的非常谦虚的网站,除了1个PHP/HTML页面和1个PHP脚本之外什么也没有。
的imagechange.php脚本如下:PHP Cron-Jobs超时错误

<?php 
unlink("images/show.png"); 
$images = glob("images/*.png"); 
copy($images[rand(0,count($images))],"images/show.png"); 
?> 

*each time it runs, it should switch show.png to a different image from the directory.

当我直接访问该页面(从地址栏)脚本完美的作品。我的意思是,没有任何东西显示在屏幕上,但图像确实改变了。

我的层次结构如下所示: ~/public_html/imagechange.php

当我使用内置在我的免费域名它说我将其设置为每次5分钟,将执行以下命令的cronjob选项:php -f /home/a3638901/public_html/imagechange.php

FTP Folder hierarchy

我让它运行几个小时,它不会改变一件事。我心想,也许这只是不好的主人。 所以我用了一个external service,这让我可以做同样的事情。这次我将它设置为每10分钟一次,并且每次都会绘制Timeout error
Error log 我真的不知道可能是脚本或cronjob的问题。

希望指导或疑难解答,提前致谢。

+0

而不是试图删除和复制过的图像,为什么不返回不同的源字符串基于时间计算?避免过度设计整个事情。 – Blake

+0

@Blake(不知道我是否明白你在说什么,但是..)那是因为'.png'文件的位置需要在论坛上用作签名。它必须是一个'.png'网址才能工作。 – Cybrus

+0

必须同意Blake你在这里解决错误的问题。但是,复制文件需要30秒的时间,如果失败了,它会失败很多。我怀疑“我的免费域中的内置cronjob选项”不是cron,而且您还没有指出哪些操作是从shell运行的,哪些是通过网络运行的。 Votong关闭。 – symcbean

回答

1

这是因为您的cron作业从不同的目录运行。

根据你的PHP版本,你可以添加一个新行<?php后:

chdir(__DIR__);

或旧版本:

chdir(dirname(__FILE__));

这将改变没有脱离行驶时webserver,但会确保您的cron作业从正确的目录运行。

但是:有些网络服务器有一个安全功能,不允许您在服务器上运行时自由更改目录。在这种情况下,你会得到你可以通过仅更改目录的命令行中运行时防止出现错误:

if (php_sapi_name() == "cli") { 
    chdir(__DIR__); 
    } 
+0

不知道我是否没有正确使用它,但它不起作用。我写的新行代码是:'chdir(“/ public_html”);' FTP Hierarchy:[截图](http://image.prntscr.com/image/790ac5bb419c4a219c881a2c6bde0971.png) – Cybrus

+0

使用上面提到的确切的行@Matijs。它应该然后工作在您的主机 – kranthi117

+0

/public_html是非常明确的错误。/home/a3638901/public_html可以在此服务器上运行。但是,上面的代码既简短又适用于每个部署,因此您应该使用该代码。 – Matijs