[英]PHP skips function call output
我有以下問題
require('drawchart.php');
if ( file_exists('drawchart.php')){ cwrapper();}
使用來自cwrapper的'chart.png'命令;
cwrapper是drawchart.php內部的函數,可訪問MySQL並繪制圖表。 該函數本身和在test.php中都可以正常工作,但是它停止在我的主程序中生成圖表,而我對為什么它在那里不起作用感到困惑。
我嘗試引入sleep(30)來查看是否需要等待文件寫入才能成功。 但這也無濟於事。 緊隨其后的第二條命令永遠不會拾取輸出文件chart.png。 在這兩種情況下,目錄都是絕對路徑,所以這不是問題。
它確實在此處拾取了一個現有的chart.png,但是沒有從if調用中生成應更新的圖表。 似乎正在跳過對cwrapper的調用。
封裝程序正在使用pchart繪制圖表,並且它在testscript中完美地完成了它。
我該如何解決這個問題? 有沒有更好的方法來實現這一目標?
首先,確保cwrapper()
函數被調用。
由於不提供drawchart.php
的路徑,如果當前目錄中不存在它,則require()
在php.ini
include_path
指定的路徑中搜索它(可以在運行時更改)。
file_exist()
並不是那么幸運,它只有在當前目錄中存在時才能找到該文件。
處理這種情況的最好方法是不檢查文件是否存在(誰在乎它?讓let require()
處理它),而是檢查要調用的函數是否存在:
require 'drawchart.php';
if (function_exists('cwrapper')) {
cwrapper();
}
實際上,由於require
會在無法加載文件時終止腳本,因此您甚至無需檢查該函數是否存在。 如果它在必需文件中定義,則它在require()
語句返回之后存在(否則腳本將中止)。
您的代碼應該很簡單:
require 'drawchart.php';
cwrapper();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.