Загадка на миллион баксов
2989 повідомлень
#15 років тому
Цитата ("Lisio"):Удачи вам в поисках заказчиков.
Спасибо

Кстати ни один из Ваших примеров у меня, например, никаких глюков не вывел. Отработали как часы.
601 повідомлення
#15 років тому
Видимо баг в работе интерпретатора. Налицо ошибки в работе с памятью. Работу интерпретатора PHP даже не представляю, может это использование совместно с каким-то приложением сказывается. Кстати, что за версию вы используете?(Lisio и Sassoft). Один из недостатков PHP - отсутствие возможности работать с памятью напрямую. Отсюда и получается такая вот "мистика"... Поэтому переходим на D - там таких проблем быть не может)
1172 повідомлення
#15 років тому
PHP Version 5.3.2-1ubuntu4.2Потому и полез сразу оперативку проверять, но проверка показывает, что с памятью все ок. И такой косяк возникает только в одном месте.
2989 повідомлень
#15 років тому
Цитата ("dervinar"):Один из недостатков PHP - отсутствие возможности работать с памятью напрямую.
Не такой уж это и недостаток. Мне уже приходилось исправлять (правда не в php

601 повідомлення
#15 років тому
Цитата ("elosoft"):Не такой уж это и недостаток. Мне уже приходилось исправлять (правда не в php ) результаты некоторых любителей без всякой надобности распределять память в приложениях ручками. Да только ручки их видно кривоватые были. То после выгрузки приложения метры не очищенной памяти остаются, то приложение само свои же данные убивает. Это не так примитивно, как кажется.
В нормальных языках программирования это хотя бы можно делать) В PHP при любых проблемах с памятью приходится заявлять "баг интерпретатора".
2989 повідомлень
#15 років тому
Цитата ("dervinar"):В нормальных языках программирования это хотя бы можно делать) В PHP при любых проблемах с памятью приходится заявлять "баг интерпретатора".
Ну вроде как обещали в будущем ввести возможность работы с памятью. А пока можно считать "издержками производства".
А глюков, собственно, в любых языках предостаточно...

1172 повідомлення
#15 років тому
Так и придется кодить этот скрипт прямо на сервере, там хоть работает нормально. Жду следующего релиза под убунту.
1172 повідомлення
#15 років тому
Так в последнем примере их и нет. Проблема возникает строго после очередного запроса в базу. Причем даже если написать mysql_query('SELECT id FROM table LIMIT 1'
137 повідомлень
#15 років тому
Lisio, напрасно вы так. elosoft, между прочим прав. Вы бы не писали так уверенно о скриптовых языках, интерпретаторах, если до конца не разбираетесь в этом.
1172 повідомлення
584 повідомлення
#15 років тому
Что выводит, до и после unset?
echo gettype($temp1);
echo gettype($temp2);
и так пробовали:
unset($temp1); $temp1=NULL;
unset($temp2); $temp2=NULL;
$temp1='бред';
$temp2='собачий';
echo $temp1;
die;
1172 повідомлення
#15 років тому
echo '--------------<br />';
echo gettype($temp1).'<br />';
echo gettype($temp2).'<br />';
echo '--------------<br />';
unset($temp1);
unset($temp2);
echo gettype($temp1).'<br />';
echo gettype($temp2).'<br />';
echo '--------------<br />';
$temp1=NULL;
$temp2=NULL;
echo gettype($temp1).'<br />';
echo gettype($temp2).'<br />';
echo '--------------<br />';
$temp1='бред';
$temp2='собачий';
echo gettype($temp1).'<br />';
echo gettype($temp2).'<br />';
echo '--------------<br />';
echo $temp1;
die;
Ответ:
--------------
--------------
--------------
NULL
NULL
--------------
string
string
--------------
собачий
3240 повідомлень
#15 років тому
Интересная проблема, не сталкивался с таким.Возможно, поможет пролить свет вот что:
Вызовите var_dump($GLOBALS); до обращения к mysql_query(...).
Вызовите var_dump($GLOBALS); после обращения к mysql_query(...).
Вызовите var_dump($GLOBALS); до этого блока, что Вы привели в первом посте.
Вызовите var_dump($GLOBALS); после этого блока, что Вы привели в первом посте (но перед вызовом die, конечно).
Было бы очень интересно посмотреть результат.
1172 повідомлення
#15 років тому
Ушло в личку. Только после "обращения" и "до этого блока" - это одно и то же, в коде они идут один за другим.
3240 повідомлень
#15 років тому
Итог.Вроде совместными с Lisio усилиями разобрались. Это баг PHP 5.3.* (проверяли в 5.3.0 и в 5.3.2). В более ранних версиях PHP этого бага нет.
Если кому интересно, вот пример, можете повторить у себя локально:
<?php
a(0,$$var);
$temp1=1;
$temp2=2;
echo $temp1;
function a($b,$c) {}
Этот код выводит 2, хотя должен выводить 1.