Почему этот код не работает? - PullRequest
0 голосов
/ 22 июня 2009

Может кто-нибудь сказать мне, почему этот код не работает?

<?php $err=1; ?>

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

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

Даже когда изображение существует, ошибка все равно выполняется. Почему?

Ответы [ 4 ]

11 голосов
/ 22 июня 2009

HTML не может устанавливать переменные PHP. Они могут быть установлены только на сервере. Метод onError тега IMG не имеет доступа к переменным PHP.

Жизненный цикл страницы:

  1. (SERVER) Сервер строит вашу страницу (обработка переменных и т. Д.)
  2. (SERVER -> CLIENT) Сервер отправляет страницу на клиентский компьютер
  3. (КЛИЕНТ) HTML загружен, javascript запущен и возникли все ошибки.

Обратите внимание, вы пытаетесь объединить элемент 3 с элементом 1, что не может быть сделано семантически.

Единственный способ сделать то, что вы пытаетесь, - это присоединить метод javascript к этому событию и связаться с сервером, когда и если будет запущен метод onError. Но это, вероятно, будет немного сложнее, чем вы привыкли.

4 голосов
/ 22 июня 2009

Поскольку php является кодом на стороне сервера, <?php $err=0; ?> будет выполняться независимо от того, произойдет ли onError или нет. Для этого вам понадобится другой метод или Javascript (или другой код на стороне клиента).

Если все, что вы хотите сделать, это распечатать переменную на экран, если изображение не загружается, вы можете использовать onError="alert('ERROR: Image did not load');", чтобы создать всплывающее окно (или вы можете использовать javascript, чтобы изменить HTML на странице ), но если вы хотите поговорить с сервером, вам придется либо отправить форму с помощью javascript, либо использовать метод AJAX.

3 голосов
/ 22 июня 2009

Ваш код будет всегда производить этот вывод:

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

Обработчик onError JavaScript пуст, поскольку код php внутри него не выводит.

Является ли код, который вы разместили, фактическим кодом или упрощенным кодом? Непонятно, чего вы пытаетесь достичь.

2 голосов
/ 22 июня 2009

Если вы проверяете наличие файла, 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 никогда не выполняется. Кажется, он выполняется, потому что вы явно выводите переменную $ err в конце скрипта. Если вы используете приведенный выше код, вы можете достичь того, что, как я считаю, было ожидаемым результатом, не полагаясь на событие JavaScript.

...