У меня следующая проблема
require('drawchart.php');
if ( file_exists('drawchart.php')){ cwrapper();}
команда с использованием ‘chart.png’ из cwrapper;
Cwrapper — это функция внутри drawchart.php, которая обращается к MySQL и рисует Chart. Эта функция прекрасно работает сама по себе и в test.php, но перестает создавать диаграмму в моей основной программе, и я озадачен, почему она просто не будет работать там.
Я попытался ввести sleep (30), чтобы увидеть, нужно ли ждать, пока файл будет записан, чтобы добиться успеха. Но это тоже не помогает. 2-я команда, следующая за ней, просто никогда не подхватывает выходной файл chart.png. Каталоги являются абсолютными путями в обоих случаях, так что это не проблема.
Он берет там существующий файл chart.png, но не обновленный, который должен быть сгенерирован из вызова if. Кажется, он пропускает этот вызов cwrapper.
Cwrapper использует pchart, чтобы нарисовать диаграмму, и он делает это самостоятельно в тестовом сценарии.
Как мне решить эту проблему?
Есть ли лучший способ добиться этого?
Прежде всего, убедитесь, что cwrapper()
функция является вызывается.
Потому что вы не предоставляете путь drawchart.php
если его нет в текущем каталоге, require()
ищет его по указанным в путях include_path
в php.ini
(это можно изменить во время выполнения).
file_exist()
Не повезло, он может найти файл, только если он существует в текущем каталоге.
Лучший способ справиться с этой ситуацией — не проверять, существует ли файл (кого это волнует? require()
обработать это), но чтобы проверить, существует ли функция, которую вы хотите вызвать:
require 'drawchart.php';
if (function_exists('cwrapper')) {
cwrapper();
}
На самом деле, потому что require
завершает сценарий, если файл не может быть загружен, вам даже не нужно проверять, существует ли функция. Если он определен в требуемом файле, то он существует после require()
оператор возвращает (или скрипт отменяется в противном случае).
Ваш код должен быть таким простым:
require 'drawchart.php';
cwrapper();
Других решений пока нет …