2017-02-20 46 views
0

我們都看過這些程序在每個任務完成後顯示一條消息,並且如果在某個點出現錯誤,則會顯示該錯誤。例如:如何在每個代碼語句實時執行後回顯狀態消息?

Task A Done 
Task B Fone 
etc... 
// If an error happens 
Error Completing Task Q: {error message} 
// Or if no error 
Task X Done 
Task Z Done 
Complete 

我想用腳本來做到這一點,我必須準確告訴我腳本出現問題的位置。現在我沒有設置任何預定義的錯誤消息,只是確認。但是如果需要的話,可以在以後製作。我不需要任何人給我一個關於如何壓縮歸檔的新代碼,因爲這個腳本工作正常。我將爲其編輯一個新功能,並且希望能夠看到這些過程,特別是如果我在前端將它用作我的用戶的服務。

代碼:

$zip=new ZipArchive(); 
if (file_exists($archive)) { 
    unlink($archive); 
} 
if (extension_loaded('zip')) { 
    $debug='<b>Extension (.zip) Is Loaded</b><br /><b><u>Beginning Search For:</u></b> (' . $folder . ')<br />'; 
    if (file_exists(realpath($folder))) { 
     $debug='<b><u>Found:</u></b> (' . $folder . ')<br />'; 
     if ($zip->open($archive, ZipArchive::OVERWRITE | ZipArchive::CREATE)) { 
      $debug='<b><u>Archive Opened:</u></b> (' . $archive . ')<br />'; 
      if (is_dir(realpath($folder))) { 
       $debug='<b>Beginning Recursive Directory Scan Of Folder: (</b>' . basename($folder) . ')<br />'; 
       $files=new RecursiveIteratorIterator(new RecursiveDirectoryIterator($folder), RecursiveIteratorIterator::SELF_FIRST); 
       foreach ($files as $file) { 
        if (is_dir(realpath($file))) { 
         $debug='<b><u>Adding Directory:</u></b> (' . basename($file) . ')<br />'; 
         $zip->addEmptyDir(zipDir($file)); 
         $dirTree='<b>|</b><br /><b>|----</b>' . $file . '<br />'; 
        } elseif (is_file($file)) { 
         $debug='<b><u>Adding File:</u></b> (' . basename($file) . ')<br />'; 
         $zip->addFromString(insertFile($file), file_get_contents($file)); 
         $dirTree='<b>|&nbsp;&nbsp;&nbsp;&nbsp;|----</b>' . basename($file) . '<br />'; 
        } else { 
         exit($zip->getStatusString()); 
        } 
       } 
      } else if (is_file($folder)) { 
       $debug='<b><u>Adding File In Archive Root:</u></b> (' . basename($folder) . ')<br />'; 
       $zip->addFromString(zipDir($folder), file_get_contents($folder)); 
      } else { 
       $debug='<b>No Directories Or Files Found In (' . $folder . ')</b>'; 
      } 
     } if ($zip->close() !== FALSE) { 
      return true; 
     } 
    } 
} 
} 

正如你所看到的,我有$debug語句還有$$dirTree語句。我想要/可以選擇顯示堆棧狀態消息或目錄樹(也是實時的)。那麼我怎麼去做這件事呢?提前致謝!

更新

我在一個函數嘗試ob_flush(); flush();因此它可以被普遍稱爲:

function debugScript($string, $x='0') { 
    if ($x === 1) { 
     echo $string; 
     ob_flush(); 
     flush(); 
    } else { 
     return $string; 
    } 
} 

和編輯所有$debug語句,像這樣:

$debug='{message}<br />'; debugScript($debug, 1); 

這表明這些消息很好,但只能在腳本完成後,而不是實時。我做錯了嗎?

+0

推入數組$數組[] = $調試 – Salman

+0

好和意志,使其顯示$調試語句,因爲它們發生在腳本? –

+0

您可以將消息追加到html,如下所示: - Salman

回答

0

您是否在回覆消息後嘗試刷新PHP?

ob_flush();flush(); 

這將強制PHP將輸出發送到客戶端(即任何迴音,你自最後一次刷新執行)

Check out PHP manual to see code examples.

+0

剛剛嘗試過,它在瀏覽器中直接轉到「此頁不起作用」。 –

+0

@the_software_trader_official對我來說,我測試了你的腳本。我在每個循環之後添加了echo/flush(1秒超時,就像一個測試 - 睡眠(1);),並且它經過了每個循環。您可能犯了語法錯誤,請再次檢查您的代碼。 – ph0enix993

+0

已更新的問題,以顯示我做了一些編輯以擺脫瀏覽器錯誤後所做的事情。 –

0

那麼你需要使用ob_start,開始輸出緩衝。我想如果你想立即發送輸出到瀏覽器,那麼應​​該完全禁用緩衝。 flush功能可以用來強制Php輸出發送到瀏覽器。

如果單獨的刷新功能不起作用,那麼你需要在你的php.ini中禁用輸出緩衝。 PHP的輸出也可以在多個位置緩存,例如php擴展,網頁瀏覽器,網頁瀏覽器模塊和代理服務器。以下指令應添加爲php.ini禁用輸出緩衝:

zlib.output_compression = 0; 
output_buffering = 0; 
相關問題