2016-09-27 69 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