Здравствуйте, mibo, Вы писали:
M>Здравствуйте, Аноним, Вы писали:
M>>>PHP не может это выполнить. А>>что значит не может??
M>Так и говорит ошибка скрипта. 500...
Здравствуйте, Zmei-Gorin, Вы писали:
ZG>Ы... а в логах что??
[Fri Apr 02 21:40:35 2004] [error] [client 192.168.17.200] Premature end of script headers: c:/php/php.exe
[Fri Apr 02 21:40:35 2004] [error] [client 192.168.17.200] File 'c:\mysql\\share\charsets\?.conf' not found (Errcode: 2)
[Fri Apr 02 21:40:35 2004] [error] [client 192.168.17.200] Character set '#14' is not a compiled character set and is not specified in the 'c:\mysql\\share\charsets\Index' file
Здравствуйте, mibo, Вы писали:
M>PHP не может это выполнить. M>Пожалуйста, подскажите в чем может быть проблема? M>На вход подаю ассоциативный массив (может быть многомерный).
M>
Возможно причина в следующем. В какой-то момент(возможно в начальный) в функцию html_decode передается NULL или false или что там еще, короче константа...
В пхп(4.х.у) по ссылке константу передавать/возвращать нельзя, а если передается/возвращается, то иногда возникает ошибка Premature ends of headers.
Здравствуйте, mibo, Вы писали:
M>Здравствуйте, Zmei-Gorin, Вы писали:
ZG>>Ы... а в логах что??
M>
M>[Fri Apr 02 21:40:35 2004] [error] [client 192.168.17.200] Premature end of script headers: c:/php/php.exe
M>[Fri Apr 02 21:40:35 2004] [error] [client 192.168.17.200] File 'c:\mysql\\share\charsets\?.conf' not found (Errcode: 2)
M>[Fri Apr 02 21:40:35 2004] [error] [client 192.168.17.200] Character set '#14' is not a compiled character set and is not specified in the 'c:\mysql\\share\charsets\Index' file
M>
M>Просто даже не знаю как интерпретировать...
Таак... Сервер какой? апач? версия PHP какая? PHP установлен как CGI? MySQL установлена?
Несколько советов: поставьте PHP 4.3.5 (последнюю версию); поставьте PHP как SAPI-модуль.
Здравствуйте, Zmei-Gorin, Вы писали:
ZG>Таак... Сервер какой? апач? версия PHP какая? PHP установлен как CGI? MySQL установлена?
ZG>Несколько советов: поставьте PHP 4.3.5 (последнюю версию); поставьте PHP как SAPI-модуль.
Сервер апач 1.pi, php 4.3.1 SAPI.
Вряд ли это из-за обеспечения.
А MySQL здесь причем?
Я вот немножго погонял этот код. Он падает когда значение переменной нет. Т.е. пустое значение. Не знаю как по другому сказать, типов то нет...
Причем падает вроде функция php, та которая декодирует.
В общем если справлюсь напишу ответ.
Здравствуйте, mibo, Вы писали:
M>Сервер апач 1.pi, php 4.3.1 SAPI.
SAPI??? не похоже, а если SAPI, то при чем тут php.exe? M>Вряд ли это из-за обеспечения.
А из-за чего? ИМХО какой-то глюк PHP M>А MySQL здесь причем?
А Вы читали записи лога, которые приводили? Он на mysql жалуется... точнее на charset.
Здравствуйте, Zmei-Gorin, Вы писали:
ZG>Здравствуйте, mibo, Вы писали:
M>>Сервер апач 1.pi, php 4.3.1 SAPI. ZG>SAPI??? не похоже, а если SAPI, то при чем тут php.exe?
При чем здесь php.exe не знаю. Но установлен php как модуль. M>>Вряд ли это из-за обеспечения. ZG>А из-за чего? ИМХО какой-то глюк PHP
Может конечно и так. M>>А MySQL здесь причем? ZG>А Вы читали записи лога, которые приводили? Он на mysql жалуется... точнее на charset.
Это все сообщения которые я нашел в логах. Все они связаны именно с исполнением этого скрипта.
Про MySQL здесь мне тоже не ясно.
В скрипте кроме установления постоянного соединения с сервером, больше ничего про MySQL нет.
Ошибка именно в этой функции. — комментирую одну строку — работает. Нет — не работает.
Строка где происходит декодирование.
Здравствуйте, mibo, Вы писали: M>Это все сообщения которые я нашел в логах. Все они связаны именно с исполнением этого скрипта. M>Про MySQL здесь мне тоже не ясно. M>В скрипте кроме установления постоянного соединения с сервером, больше ничего про MySQL нет. M>Ошибка именно в этой функции. — комментирую одну строку — работает. Нет — не работает. M>Строка где происходит декодирование.
Да, у меня происходит то же самое.
PHP падает и утаскивает за собой Апач при выпотнении такого кода:
<?php
function test(&$a){
$a=html_entities_decode($a);
}
test($undefined_var);
?>
Здравствуйте, mibo, Вы писали:
M>PHP не может это выполнить. M>Пожалуйста, подскажите в чем может быть проблема? M>На вход подаю ассоциативный массив (может быть многомерный).
M>
Насчет падений тебе уже ответили про константы.
А порочность... уж если ты используешь foreach ($s as $key => $val), то разбитые ключ-значение и пользуй:
function html_decode(&$s) {
if (is_array($s)) {
foreach ($s as $key => $val)
if (is_array($val)) html_decode($val);
else $val = html_entity_decode($val);
} else $s = html_entity_decode($s);
}
или так:
function html_decode(&$s) {
if (is_array($s)) {
array_walk($s, create_function('&$val, $key','$val = (is_array($val))?html_decode($val):html_entity_decode($val);'));
} else $s = html_entity_decode($s);
}
Здравствуйте, DSD, Вы писали:
DSD>Здравствуйте, mibo, Вы писали:
DSD>Насчет падений тебе уже ответили про константы. DSD>А порочность... уж если ты используешь foreach ($s as $key => $val), то разбитые ключ-значение и пользуй:
Замечание: Also note that foreach operates on a copy of the specified array and not the array itself. Therefore, the array pointer is not modified as with the each() construct, and changes to the array element returned are not reflected in the original array. However, the internal pointer of the original array is advanced with the processing of the array. Assuming the foreach loop runs to completion, the array's internal pointer will be at the end of the array.
По-русски: при изменении $val значение $array[$key] не изменится.
Тогда уж лучше так:
function html_decode(&$s) {
if (is_array($s)) {
reset($arr);
while (list($key, $value) = each ($arr))
if (is_array($s[$key])) html_decode($s[$key]);
else $s[$key] = html_entity_decode($val);
} else $s = html_entity_decode($s);
}
Здравствуйте, Grelkin, Вы писали:
G>Здравствуйте, Zmei-Gorin, Вы писали:
G>Хм... А функцию html_entities_decode Вы сами писали ?
html_entity_decode. А Вы никогди не ошибались?..
По поводу ошибки в PHP — см. bugs.php.net — тот баг был исправлен в версии 4.3.2