2011-06-28 110 views
0

我有一位客戶遇到與腳本超時有關的錯誤。我已經包含了下面的代碼,但我認爲問題是需要延長超時。致命錯誤:在腳本中超出了最大執行時間30秒

這是我可以在代碼中設置的東西,還是必須由Web主機(GoDaddy)設置?

致命錯誤:超出d爲30秒的最大執行時間:\託管\ 123 \ HTML \ siteame \可溼性粉劑內容\插件\爲myplugin上線170

在該代碼\ myplugin.php要點是:

function my_copy_recurse($src,$dst){ 
    $dir = opendir($src); 
    @mkdir($dst); 
    while(false !== ($file = readdir($dir))) 
    { 
     if (($file != '.') && ($file != '..')) 
     { 
      if (is_dir($src . '/' . $file)) { 
       my_copy_recurse($src . '/' . $file,$dst . '/' . $file); 
      } 
      else { 
       copy($src . '/' . $file,$dst . '/' . $file); 
      } 
     } //THIS IS LINE 170 
    } 
    closedir($dir); 
} 
+0

你有沒有試過對一個小目錄(也許只有一個文件)運行此功能,以確保你沒有發生無限循環? –

+0

嗨,布賴恩,是的,它安裝在許多客戶站點以及幾個本地主機站點上。 –

回答

1

與他們聯繫,限制最大的執行時間使用set_time_limit($seconds)。 如果將$seconds設置爲零,則不會施加時間限制。所以只需在腳本開始處添加set_time_limit(0),腳本將一直工作到結束。但是,如果由於瀏覽器超時而導致用戶的瀏覽器斷開連接,您的腳本可能會被暫停,因此您需要在腳本的開頭添加ignore_user_abort(true)以忽略它,並直到腳本結束。

+0

@Eugene - 這是有道理的。你知道默認的超時時間是什麼,例如PHP 5.2? +1 for ignore_user_abort() –

+0

要找出當前設置的時間限制,請使用'ini_get('max_execution_time');' –

+0

對於當前「忽略用戶中止」值,使用'ini_get('ignore_user_abort');' –

0

根據什麼設置你的主機已經允許你可以使用set_time_limit()傳遞給它在幾秒鐘內你要多長時間花超時之前(使用0爲無窮大)。 E.g:

set_time_limit(0);  //script will now run till completes 

GoDaddy的可能,雖然阻止此所以,如果它不工作,嘗試

-1

你的代碼改成這樣:

function my_copy_recurse($src,$dst){ 
    $dir = opendir($src); 

    @mkdir($dst); 

    while($file = readdir($dir)) 

    { 

     if ($file == '.' || $file == '..') continue; 


      if (is_dir($src . '/' . $file)) { 
       my_copy_recurse($src . '/' . $file,$dst . '/' . $file); 
      } 
      else { 
       copy($src . '/' . $file,$dst . '/' . $file); 
      } 
    } 
    closedir($dir); 
} 
+0

這個代碼和Scott提供的代碼有什麼不同? –

4

如果你託管在GoDaddy的,Windows主機您的網站,並使用WordPress,你遲早將面臨最長執行時間了問題。我面對這個問題已經有一段時間了,看着谷歌,碰到我的腦袋。如果你面臨着同樣的一系列問題如下:

  1. 你是託管在GoDaddy的思想,他們是真棒,但你發現WordPress的拋出執行時間錯誤
  2. 你接觸載體。他們顯然會給你一個冷遇,或者讓你寫一個自定義的php.ini/php5.ini。
  3. 你不知道該怎麼做,你的老闆在你的頭上。
  4. 你試圖抓住GoDaddy的ini文件,你不能!
  5. 最後,你決定編寫自己的php.ini文件,但要麼是害怕打破東西,或只是不知道從哪裏開始的,

這篇文章是給你的>

  1. 開放你的文本編輯器。我推薦記事本++。創建以下文件: info.php的
  1. 上傳info.php的到您的主機的根。現在瀏覽到http://yourhost/info.php。無論加載在屏幕上的是PHP配置。查找加載的配置文件並記下其值。在我的情況下,它是C:\ PHP5 \ php.ini。我們需要在我們的自定義PHP5.ini文件中包含所有這些信息,但是需要複製和格式化太多信息,因此我們將複製GoDaddy的默認文件並根據需要進行編輯。

  2. 火文本編輯器並創建以下文件: getconfig.php <?php copy('C:\PHP5\php.ini'*, 'PHP5.ini'); echo('finally'); ?>
    (替換*與任何路徑加載的配置文件顯示出來),通過他們的網站

  3. 打開GoDaddy的主機管理器(是的)。啓動文件管理器
  4. 在您的主機根目錄下創建一個文件夾「baddaddy」。
  5. 選擇新創建的文件夾「baddaddy」並單擊權限。 使其網頁可寫。
  6. 將文件getconfig.php複製到badaddy,然後瀏覽到http://yourhost/baddaddy/getconfig.php

  7. 一旦你看到「最後」寫在屏幕上,回到GoDaddy控制面板中的filemanager,轉到baddaddy文件夾,你會看到一個新的文件PHP5.ini出現在那裏。下載這個文件。這是GoDaddy設置的副本。

  8. 無論你需要什麼樣的改變(只要知道你在改變什麼,我不是一個PHP專家,所以如果你搞砸了我不能負責)。對於我的問題,我改變了的max_execution_time = 30的max_execution_time = 1200

  9. 上傳編輯過的文件到您的應用程序的根和背部GoDaddy的控制面板,IIS管理,命中回收應用程序池,然後等待一段時間(20分鐘)

  10. 瀏覽回http://yourhost/info.php確認新的設置到位

重要* * 如果您在執行完所有操作後在您的GoDaddy WordPress博客上看到「500:內部服務器錯誤」,請將您的編輯和重新上傳的PHP5.ini中的log_errors = On更改爲log_errors = Off ,回收應用程序池並等待。如果無法找到日誌文件,彈出500錯誤。

我沒有PHP專家,但這件事情爲我工作,博客仍然加載緩慢,但我從來沒有看到任何「致命錯誤:30秒超時」。

+0

非常棒的演練 - 你是一個救星! – SqlRyan

0

通過在「php.ini」文件中設置「max_execution_time = 600」爲我工作。

相關問題