【问题标题】:PHP skips function call outputPHP 跳过函数调用输出
【发布时间】:2017-09-05 09:10:49
【问题描述】:

我有以下问题

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 调用中生成的更新的 chart.png。它似乎正在跳过对 cwrapper 的调用。

cwrapper 正在使用 pchart 绘制图表,并且它在测试脚本中完美地完成了这一点。

我该如何解决这个问题? 有没有更好的方法来实现这一点?

【问题讨论】:

  • 首先,确保cwrapper()函数调用。
  • 你是什么意思?回显显示它已运行的内容?
  • 或在else 分支上回显某些内容,让您知道cwrapper() 函数未被调用。另请阅读下面的答案。

标签: php mysql if-statement wrapper pchart


【解决方案1】:

首先,确保cwrapper()函数调用。

因为你没有提供drawchart.php的路径,如果当前目录不存在,require()php.iniinclude_path指定的路径中查找运行时)。

file_exist()就没有那么幸运了,它只有在当前目录下才能找到该文件。

处理这种情况最好的方法是不检查文件是否存在(谁在乎呢?让require()处理它)而是检查你要调用的函数是否存在:

require 'drawchart.php';

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

实际上,因为require在文件无法加载时终止脚本,所以你甚至不需要检查函数是否存在。如果它在所需文件中定义,则它在require() 语句返回后存在(否则脚本将中止)。

你的代码应该很简单:

require 'drawchart.php';

cwrapper();

【讨论】:

  • 当我调用一个产生输出chart.png的函数时。是否有理由在下一个使用它的函数调用中跳过或不可用此文件?也许滞后于文件的写入或类似的东西?与此同时,我会尝试不使用 file_exists
  • 你是对的。我尝试使用 {} 将以下命令放入 if 语句中。它甚至没有达到这个命令。这意味着 if 语句假定为 FALSE,即使 php 文件与运行时 php 存在于同一目录中。更近了一步!!谢谢
  • 现在我正在运行它,就像你说的非常简单,没有 if shebang。我会让你知道。代码需要很长时间才能完成。感谢您的所有回复。你们太棒了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多