[Модуль] Погода Яндекс (yandexweather)
Модератор: immortal
-
- Сообщения: 12
- Зарегистрирован: Чт июн 21, 2018 12:55 am
- Благодарил (а): 0
- Поблагодарили: 0
Re: [Модуль] Яндекс погода 2018
точно такие же ошибки на RasPi3.
Warning: strlen() expects parameter 1 to be string, array given in C:\_majordomo\htdocs\lib\caching.class.php on line 19
и
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in C:\_majordomo\htdocs\lib\mysqli.class.php on line 227
Недели две уже.
только что удалил объекты и модуль, и поставил заново. Ошибки теже.
Что еще можно попробовать сделать?
Warning: strlen() expects parameter 1 to be string, array given in C:\_majordomo\htdocs\lib\caching.class.php on line 19
и
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in C:\_majordomo\htdocs\lib\mysqli.class.php on line 227
Недели две уже.
только что удалил объекты и модуль, и поставил заново. Ошибки теже.
Что еще можно попробовать сделать?
-
- Сообщения: 2801
- Зарегистрирован: Пн дек 26, 2016 9:51 am
- Откуда: Екатеринбург
- Благодарил (а): 380 раз
- Поблагодарили: 693 раза
- Контактная информация:
Re: [Модуль] Яндекс погода 2018
Какая версия php у вас стоит?
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
-
- Сообщения: 12
- Зарегистрирован: Чт июн 21, 2018 12:55 am
- Благодарил (а): 0
- Поблагодарили: 0
Re: [Модуль] Яндекс погода 2018
Версия, судя по всему 7,0
в логах после каждого запроса погоды вот такое:
Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/scripts/cycle_yandexweather.php:19) in /var/www/html/modules/yandexweather/get.inc.php on line 55
Warning: strlen() expects parameter 1 to be string, array given in /var/www/html/lib/caching.class.php on line 19
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in /var/www/html/lib/mysqli.class.php on line 227
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in /var/www/html/lib/mysqli.class.php on line 227
в логах после каждого запроса погоды вот такое:
Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/scripts/cycle_yandexweather.php:19) in /var/www/html/modules/yandexweather/get.inc.php on line 55
Warning: strlen() expects parameter 1 to be string, array given in /var/www/html/lib/caching.class.php on line 19
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in /var/www/html/lib/mysqli.class.php on line 227
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in /var/www/html/lib/mysqli.class.php on line 227
-
- Сообщения: 2801
- Зарегистрирован: Пн дек 26, 2016 9:51 am
- Откуда: Екатеринбург
- Благодарил (а): 380 раз
- Поблагодарили: 693 раза
- Контактная информация:
Re: [Модуль] Яндекс погода 2018
У меня таких ошибок почему-то не наблюдается.
Попробовал исправить, проверьте.Dmitriy Wizen писал(а): ↑Чт июн 21, 2018 9:38 amВерсия, судя по всему 7,0
в логах после каждого запроса погоды вот такое:
Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/scripts/cycle_yandexweather.php:19) in
/var/www/html/modules/yandexweather/get.inc.php on line 55
strlen() видимо из другого проекта, в моем коде его нет.Dmitriy Wizen писал(а): ↑Чт июн 21, 2018 9:38 amWarning: strlen() expects parameter 1 to be string, array given in /var/www/html/lib/caching.class.php on line 19
причину этого сложно установить.Dmitriy Wizen писал(а): ↑Чт июн 21, 2018 9:38 amWarning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in /var/www/html/lib/mysqli.class.php on line 227
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in /var/www/html/lib/mysqli.class.php on line 227
Эта ошибка - вторичная. И в правильно спроектированном приложении возникать в принципе не должна.
Она лишь сигнализирует о том, что предыдущая функция, которая выполняла SQL запрос, окончилась неудачей, но при этом о причине неудачи никакой информации не несёт.
Чтобы таких ошибок в коде не возникало, необходимо проверять результат той самой предыдущей функции, выполнявшей SQL запрос. Но делать это надо с умом, а не так, как советуют неспециалисты, десятилетиями переписывая друг у друга один и тот же код, не понимая его смысла и не сталкиваясь с результатами его работы (весьма плачевными) на практике.
Вызывая функцию mysql_query(), необходимо всегда проверять результат её работы. И если функция вернула не корректный ресурс, а пустоту, то необходимо, во-первых, получить от mysql сообщение об ошибке, а во-вторых, транслировать его в ошибку РНР (это принципиальный момент, которого начинающие пользователи РНР не понимают поголовно). А в-третьих, очень полезно бывает добавить в сообщение об ошибке сам запрос.
За первое отвечает функция mysql_error(), за второе - trigger_error(), а для третьего необходимо всегда сначала присваивать запрос переменной. Таким образом, любой вызов mysql_query() должен выглядеть так:
в общем нужно понимание, на какое место ругается. В виду того, что в моей конфигурации эта ошибка отсутствует, нужен для анализа php.ini, точную версию php и т.д...и тестировать уже при наличии этого ворнинга.Эта ошибка возникает, если запрос не может быть выполнен. Функции, которые могут к ней привести:
mysql_fetch_array/mysqli_fetch_array()
mysql_fetch_assoc()/mysqli_fetch_assoc()
mysql_num_rows()/mysqli_num_rows()
Если с запросом всё в порядке, и просто результат его выполнения пустой, то ошибка не возникает. К ошибке приводит только неверный синтаксис SQL.
Как найти источник ошибки
Убедитесь, что на сервере, на котором вы ведёте разработку, включено отображение всех ошибок. Вы можете включить его из PHP, выполнив error_reporting(-1); (можно разместить этот код в конфигурационном файле вашего сайта, например). Если при попытке выполнения запроса будут обнаружены ошибки в синтаксисе, то они будут отображены.
Используйте mysql_error(). Эта функция вернёт строку с текстом ошибки, если таковая возникла при выполнении последнего запроса.
Например:
mysql_connect($host, $username, $password) or die("Ошибка подключения");
mysql_select_db($db_name) or die("Ошибка выбора БД");
$sql = "SELECT * FROM table_name";
$result = mysql_query($sql);
if ($result === false) {
echo mysql_error();
}
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
-
- Сообщения: 12
- Зарегистрирован: Чт июн 21, 2018 12:55 am
- Благодарил (а): 0
- Поблагодарили: 0
Re: [Модуль] Яндекс погода 2018
Обновился. посмотрим что будет при очередном автоматическом обновлении погоды.directman66 писал(а): ↑Чт июн 21, 2018 11:17 amstrlen() видимо из другого проекта, в моем коде его нет.Dmitriy Wizen писал(а): ↑Чт июн 21, 2018 9:38 amWarning: strlen() expects parameter 1 to be string, array given in /var/www/html/lib/caching.class.php on line 19
Но
Warning: strlen() expects parameter 1 to be string, array given in /var/www/html/lib/caching.class.php on line 19
не у меня одного возникает:
Warning: strlen() expects parameter 1 to be string, array given in C:\_majordomo\htdocs\lib\caching.class.php on line 19
Если как то другой проект цепляется, то не совсем пока понятно как и почему.
ошибка эта выскакивает каждый раз, например, при нажатии "GET UPDATE"
- Вложения
-
- get_update_19.jpg (98.66 КБ) 3060 просмотров
-
- Сообщения: 2801
- Зарегистрирован: Пн дек 26, 2016 9:51 am
- Откуда: Екатеринбург
- Благодарил (а): 380 раз
- Поблагодарили: 693 раза
- Контактная информация:
Re: [Модуль] Яндекс погода 2018
Видимо ругается на это:
caching.class.php
попробуйте заменить 19 строку в файле /var/www/lib/caching.class.php на
caching.class.php
Код: Выделить всё
function saveToCache($key, $value, $ttl = 60)
{
global $db;
if (isset($_SERVER['REQUEST_METHOD']))
{
global $memory_cache;
$memory_cache[$key] = $value;
}
if (strlen($value) <= 255)
{
$rec = array('KEYWORD' => $key, 'DATAVALUE' => $value, 'EXPIRE' => date('Y-m-d H:i:s', time() + $ttl));
}
else
{
$rec = array('KEYWORD' => $key, 'DATAVALUE' => '(too big)', 'EXPIRE' => date('Y-m-d H:i:s', time() + $ttl));
}
$sqlQuery = "REPLACE INTO cached_values (KEYWORD, DATAVALUE, EXPIRE)
VALUES ('" . $db->DbSafe1($rec['KEYWORD']) . "',
'" . $db->DbSafe1($rec['DATAVALUE']) . "',
'" . $rec['EXPIRE'] . "')";
SQLExec($sqlQuery);
}
Код: Выделить всё
if (count($value) <= 255)
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
-
- Сообщения: 12
- Зарегистрирован: Чт июн 21, 2018 12:55 am
- Благодарил (а): 0
- Поблагодарили: 0
Re: [Модуль] Яндекс погода 2018
Спасибо!
Попробую, но разве strLen - длинна строки, и count , это одно и тоже? в смысле конечного результата.
PS
ошибка 19 вроде не проявляется больше при "GET UPDATE".
Посмотрим не отвалится ли что-то в другом месте.
Попробую, но разве strLen - длинна строки, и count , это одно и тоже? в смысле конечного результата.
PS
ошибка 19 вроде не проявляется больше при "GET UPDATE".
Посмотрим не отвалится ли что-то в другом месте.
-
- Сообщения: 1553
- Зарегистрирован: Сб янв 13, 2018 5:00 pm
- Благодарил (а): 39 раз
- Поблагодарили: 574 раза
Re: [Модуль] Яндекс погода 2018
Судя по всему эта функция кэширует значение каких-то свойств объекта. Менять strlen на count не надо, потому что свойства должны быть строковыми. А ошибка возникает скорее всего из-за того, что модуль заносит в свойство не строку, а массив, возможно массив из одного элемента, но он всё равно останется массивомdirectman66 писал(а): ↑Чт июн 21, 2018 12:10 pmВидимо ругается на это:
caching.class.phpпопробуйте заменить 19 строку в файле /var/www/lib/caching.class.php наКод: Выделить всё
function saveToCache($key, $value, $ttl = 60) { global $db; if (isset($_SERVER['REQUEST_METHOD'])) { global $memory_cache; $memory_cache[$key] = $value; } if (strlen($value) <= 255) { $rec = array('KEYWORD' => $key, 'DATAVALUE' => $value, 'EXPIRE' => date('Y-m-d H:i:s', time() + $ttl)); } else { $rec = array('KEYWORD' => $key, 'DATAVALUE' => '(too big)', 'EXPIRE' => date('Y-m-d H:i:s', time() + $ttl)); } $sqlQuery = "REPLACE INTO cached_values (KEYWORD, DATAVALUE, EXPIRE) VALUES ('" . $db->DbSafe1($rec['KEYWORD']) . "', '" . $db->DbSafe1($rec['DATAVALUE']) . "', '" . $rec['EXPIRE'] . "')"; SQLExec($sqlQuery); }
Код: Выделить всё
if (count($value) <= 255)
-
- Сообщения: 12
- Зарегистрирован: Чт июн 21, 2018 12:55 am
- Благодарил (а): 0
- Поблагодарили: 0
Re: [Модуль] Яндекс погода 2018
Спасибо!, так и предполагал. Вернул Strlen обратно, тем более что замена не помогла глобально.fandaymon писал(а): ↑Чт июн 21, 2018 12:53 pmСудя по всему эта функция кэширует значение каких-то свойств объекта. Менять strlen на count не надо, потому что свойства должны быть строковыми. А ошибка возникает скорее всего из-за того, что модуль заносит в свойство не строку, а массив, возможно массив из одного элемента, но он всё равно останется массивомdirectman66 писал(а): ↑Чт июн 21, 2018 12:10 pmВидимо ругается на это:
caching.class.phpпопробуйте заменить 19 строку в файле /var/www/lib/caching.class.php наКод: Выделить всё
function saveToCache($key, $value, $ttl = 60) { global $db; if (isset($_SERVER['REQUEST_METHOD'])) { global $memory_cache; $memory_cache[$key] = $value; } if (strlen($value) <= 255) { $rec = array('KEYWORD' => $key, 'DATAVALUE' => $value, 'EXPIRE' => date('Y-m-d H:i:s', time() + $ttl)); } else { $rec = array('KEYWORD' => $key, 'DATAVALUE' => '(too big)', 'EXPIRE' => date('Y-m-d H:i:s', time() + $ttl)); } $sqlQuery = "REPLACE INTO cached_values (KEYWORD, DATAVALUE, EXPIRE) VALUES ('" . $db->DbSafe1($rec['KEYWORD']) . "', '" . $db->DbSafe1($rec['DATAVALUE']) . "', '" . $rec['EXPIRE'] . "')"; SQLExec($sqlQuery); }
Код: Выделить всё
if (count($value) <= 255)
в логе все равно ошибки после автообновления данных о погоде:
12:55:19 running cycle_yandexweather.php
Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/scripts/cycle_yandexweather.php:19) in /var/www/html/modules/yandexweather/get.inc.php on line 21
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in /var/www/html/lib/mysqli.class.php on line 227
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in /var/www/html/lib/mysqli.class.php on line 227
Последнее обновление модуля "Погода яндекс" установлены.
-
- Сообщения: 29
- Зарегистрирован: Пн дек 11, 2017 9:15 am
- Благодарил (а): 11 раз
- Поблагодарили: 9 раз
Re: [Модуль] Яндекс погода 2018
pi3
уведомления, кнопка "сохранить":
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in /var/www/html/lib/mysqli.class.php on line 227
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in /var/www/html/lib/mysqli.class.php on line 227
уведомления, кнопка "сохранить":
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in /var/www/html/lib/mysqli.class.php on line 227
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in /var/www/html/lib/mysqli.class.php on line 227