2017-09-05 45 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