2017-09-05 129 views
0

我有以下問題PHP跳過函數調用輸出

require('drawchart.php'); 

if (file_exists('drawchart.php')){ cwrapper();} 

使用從cwrapper的 'chart.png' 命令;

cwrapper是drawchart.php中的一個函數,它訪問MySQL並繪製圖表。這個函數在它自己和test.php中工作得很好,但是它停止了在我的主程序中生成圖表,我很困惑爲什麼它不能在那裏工作。

我試過介紹睡眠(30),看看它是否需要等待文件寫入才能成功。但這也沒有幫助。接下來的第二個命令永遠不會選取輸出文件chart.png。目錄是兩種情況下的絕對路徑,所以這不是問題。

它確實拿起了一個現有的chart.png,但沒有更新的應該從if調用生成。它似乎在跳過對cwrapper的這個調用。

cwrapper使用pchart繪製圖表並且它在測試腳本中完全獨立完成。

我該如何解決這個問題? 有沒有更好的方法來實現這一目標?

+0

首先,確保了'cwrapper()'函數** **被調用。 – axiac

+0

你是什麼意思?迴應一些顯示它已經運行的東西? – NoobPython

+0

或者在'else'分支上回顯一些東西,讓你知道'cwrapper()'函數沒有被調用。還請閱讀下面的答案。 – axiac

回答

0

首先,確保cwrapper()函數被調用。

因爲你不提供drawchart.php路徑,如果它不在當前目錄中,require()搜索它在php.iniinclude_path指定的路徑(可以在運行時更改)。

file_exist()沒有那麼幸運,它只能在當前目錄中存在該文件時才能找到該文件。

來處理這種情況,最好的辦法是,如果文件存在不檢查(誰在乎呢?,讓require()處理它),但是檢查,如果你想調用的函數存在:

require 'drawchart.php'; 

if (function_exists('cwrapper')) { 
    cwrapper(); 
} 

實際上,因爲require在文件無法加載時終止腳本,所以甚至不需要檢查該函數是否存在。如果它在所需文件中定義,則在require()語句返回後(或者腳本以其他方式中止)存在。

您的代碼應該是簡單的:

所有的
require 'drawchart.php'; 

cwrapper(); 
+0

當我調用一個函數,例如產生一個輸出chart.png。是否有理由在下次使用它的函數調用時跳過該文件或不可用?也許是在寫入文件或類似的東西滯後?在此期間,我會嘗試沒有file_exists – NoobPython

+0

你是對的。我嘗試使用{}將以下命令放入if語句中。它甚至沒有達到這個命令。這意味着即使php文件與運行時php存在於同一目錄中,if語句也假設爲FALSE。更近了一步!!謝謝 – NoobPython

+0

現在我正在運行它,就像你說的很簡單,沒有如果shebang。我會讓你知道的。代碼需要很長時間才能完成。感謝您的回覆。你們很棒! – NoobPython