powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHP Продолжить выполнение кода после ошибки
9 сообщений из 9, страница 1 из 1
PHP Продолжить выполнение кода после ошибки
    #38626886
ZardoZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибка генерируется так:
Код: php
1.
2.
3.
trigger_error('Error: ' . mysql_error($this->link) . '
Error No: ' . mysql_errno($this->link) . '
' . $sql);



Вывод текста я убрал. Но скрипт все равно стопорится, если происходит ошибка. При том блоком try она не ловится.

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public function insertProxy($ip, $port) {
        try {
            $this->db_connection->query('INSERT INTO ' . DB_PREFIX . 'proxy_list (ip, port) VALUES ("' . $ip . '",' . $port . ')');
            echo 'При ошибке я не отображаюсь';
            return $this->db_connection->getLastId();
        }
        catch (Exception $e) {
            echo 'При ошибке я тоже не отображаюсь';
            var_dump($e);
        }
    }



На исключении я строю проверку уникальности ip. Все что уже есть должно игнорироваться. А оно встаёт и всё.
...
Рейтинг: 0 / 0
PHP Продолжить выполнение кода после ошибки
    #38626892
?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
?
Гость
...
Рейтинг: 0 / 0
PHP Продолжить выполнение кода после ошибки
    #38627289
ZardoZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так тоже пробовал - аналогичный результат. Видать еще что-то надо учесть.

Код: php
1.
2.
3.
4.
function silentErrorHandler($errno, $errstr) {
        echo 'При ошибке я отображаюсь';
        return true;
}




Код: php
1.
2.
3.
4.
5.
6.
7.
public function insertProxy($ip, $port) {
            set_error_handler('silentErrorHandler');
            $this->db_connection->query('INSERT INTO ' . DB_PREFIX . 'proxy_list (ip, port) VALUES ("' . $ip . '",' . $port . ')');
            echo 'При ошибке я не отображаюсь';
            restore_error_handler();
            return $this->db_connection->getLastId();
    }
...
Рейтинг: 0 / 0
PHP Продолжить выполнение кода после ошибки
    #38627296
sxq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приведите конкретный текст ошибки, когда происходит остановка. Непонятно каким образом она генерируется, вероятно, в недрах $this->db_connection->query где-то.
Логичнее прерывания генерировать самостоятельно, а не отлавливать ошибки в ходе выполнения программы интерпретатором, тем более фатальные ошибки все равно вызовут остановку.
...
Рейтинг: 0 / 0
PHP Продолжить выполнение кода после ошибки
    #38627305
ZardoZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sxq,

Выше приведен код как генерится ошибка (модуле mysql.php движка OpenCart), поэтому этот механизм я не могу изменить. Поэтому мне и надо проигнорировать уже брошенную ошибку, чтобы не создавать лишних запросов к БД для проверок.

Вот исходник метода, если вдруг так понятнее:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
	public function query($sql, $iterator = false) {
		$resource = mysql_query($sql, $this->link);

		if ($resource) {
			if (is_resource($resource)) {
				$i = 0;
    	
				if ($iterator) {
					$data = new MySqlRowIterator($resource);
				} else {
					$data = array();
			
					while ($result = mysql_fetch_assoc($resource)) {
						$data[$i] = $result;
			
						$i++;
					}
					
					mysql_free_result($resource);
				}
				
				$query = new stdClass();
				$query->row = isset($data[0]) ? $data[0] : array();
				$query->rows = $data;
				$query->num_rows = $i;
				
				unset($data);
				
				return $query;	
    		} else {
				return true;
			}
		} else {
			trigger_error('Error: ' . mysql_error($this->link) . '
Error No: ' . mysql_errno($this->link) . '
' . $sql);
			exit();
    	}
  	}
...
Рейтинг: 0 / 0
PHP Продолжить выполнение кода после ошибки
    #38627306
ZardoZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибка как и должна быть:

авторNotice: Error: Duplicate entry '87.106.242.46' for key 'ip'
Error No: 1062
INSERT INTO proxy_list (ip, port) VALUES ("87.106.242.46",100) in /home/*****/mobichel.com/docs/mob_new/system/database/mysql.php on line 80
...
Рейтинг: 0 / 0
PHP Продолжить выполнение кода после ошибки
    #38627309
ZardoZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эх нельзя редактировать сообщения. Неудобно.

Если я перехватываю через set_error_handler, то вывод ошибки подавляется, но продолжение скрипта не происходит. Может проблема в OpenCart? Еще что-то влияет?
...
Рейтинг: 0 / 0
PHP Продолжить выполнение кода после ошибки
    #38627336
?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
?
Гость
ZardoZ
Код: php
1.
2.
3.
4.
			trigger_error('Error: ' . mysql_error($this->link) . '
Error No: ' . mysql_errno($this->link) . '
' . $sql);
			exit();

Ну после exit() вы продолжить выполнение никак не сможете
...
Рейтинг: 0 / 0
PHP Продолжить выполнение кода после ошибки
    #38627353
ZardoZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНу после exit() вы продолжить выполнение никак не сможете

Вот и вправду прозрение, оказывается это псевдоним die (а я думал это псевдоним return). Тогда VQMod использую чтобы убрать эту строку... Главное чтобы сам OpenCart не посыпался при ошибках.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHP Продолжить выполнение кода после ошибки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]