2015-06-25 18 views
2

被調用時,PHP腳本中途失敗我有一個可以從瀏覽器執行的父PHP腳本。這會通過exec('/full/path/to/php -f /full/path/to/child_script.php args &> debug.log &')產生子進程,然後向瀏覽器返回響應。子進程使用Plates和mPDF生成一堆PDF文件。當通過瀏覽器通過exec調用時,子腳本通過創建PDF獲得大約10%-20%的比例,然後神祕地停止,沒有任何輸出,除了我爲了調試目的可能放入的任何echo語句。使用確切相同的命令從CLI調用時所使用的瀏覽器 從exec()

  • exec()通話作品在我的本地計算機上,我們的QA服務器,只是沒有在生產

    • 孩子腳本工作
    • 安全模式是關閉
    • chmod 0777「編孩子腳本和所有它
    • display_errors操作的文件/目錄,log_errorstrack_errors是在孩子腳本LL上
    • error_reporting = E_ALL | E_STRICT
    • max_execution_time = 600
    • execdisable_functions
    • 稱爲set_time_limit(0)

    我真的很爲難。什麼可能導致這種情況?或者我應該採取什麼進一步措施進行調試?

    UPDATE

    的問題是不是與調用exec(或shell_exec)本身,因爲我可以調用父腳本,然後通過exec從CLI調用主腳本。只有當我嘗試通過網絡執行時纔會出現此問題。

  • +0

    如果它的打印回聲語句你怎麼知道它已經停止了? – cjds

    +0

    它停止生成PDF。基本上,它是一個執行250次以上的循環,每次迭代生成一個PDF。我會定期收到前30-70次迭代的回聲,然後一無所獲。 – blcook223

    +0

    就個人而言,如果我不得不在腳本中使用'exec()',我會確保它無法通過瀏覽器窗口訪問,並在適用的情況下將其作爲cron作業。 –

    回答

    0

    一些評論是在正確的軌道上。在與我的託管公司討論此事後,它確實顯示他們在CPU時間爲120秒後正在殺死腳本。這就是爲什麼我沒有從PHP獲得任何時間限制的錯誤消息,並且實際執行時間不一致。

    我的解決方案是將其重構爲cron作業,其中服務器允許更長的限制。感謝所有的建議。