为什么这段代码不起作用?

时间:2009-06-21 23:56:41

标签: php image onerror

有谁可以告诉我为什么这段代码不起作用?

<?php $err=1; ?>

<img src="334234234234234.gif" onError="<?php $err=0; ?>" />

<?php echo "<br />" . $err; ?>

即使图像存在,仍然会执行错误。为什么呢?

4 个答案:

答案 0 :(得分:11)

HTML无法设置PHP变量。这些只能在服务器上设置。 IMG标记的onError方法无法访问PHP变量。

页面生命周期:

  1. (SERVER)服务器构建您的页面(处理变量等)
  2. (SERVER - &gt; CLIENT)服务器将页面发送到客户端计算机
  3. (CLIENT)加载html,运行javascript,并引发任何错误。
  4. 注意,您正在尝试将第3项与第1项合并,而这在项目上无法完成。

    执行您尝试的操作的唯一方法是将javascript方法附加到该事件,并在运行onError方法时与服务器通信。但这可能比你习惯的要复杂得多。

答案 1 :(得分:4)

由于php是服务器端代码,无论onError是否实际发生,<?php $err=0; ?>都会被执行。您将需要使用其他方法或Javascript(或其他客户端代码)来执行此操作。

如果您想要做的就是在图片未加载的情况下将变量打印到屏幕上,您可以使用onError="alert('ERROR: Image did not load');"创建一个弹出框(或者您可以使用javascript来修改html页面),但是如果你想与服务器通信,你必须使用javascript提交表单或使用AJAX方法。

答案 2 :(得分:3)

您的代码将始终生成此输出:

<img src="334234234234234.gif" onError="" />
<br />0

onError JavaScript处理程序为空,因为其中的php代码不会产生任何输出。

您发布的代码是实际代码还是简化代码?目前尚不清楚你想要完成什么。

答案 3 :(得分:2)

如果要检查文件的存在,PHP提供了一个很好的功能

http://us.php.net/file_exists

来自页面的修改示例。

<?php
$filename = '/path/to/334234234234234.gif';

if (file_exists($filename)) {
    echo "<img src='334234234234234.gif'/>";
} else {
    echo "The file $filename does not exist";
}
?>

回答你的问题。

  

即使图像存在,也是如此   onerror仍然执行。为什么呢?

永远不会执行onError。它似乎执行,因为您在脚本的末尾显式输出$ err变量。如果您使用上面的代码,您可以在不依赖JavaScript事件的情况下实现我认为的预期结果。