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

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

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

В нормальных языках программирования это хотя бы можно делать) В PHP при любых проблемах с памятью приходится заявлять "баг интерпретатора".
Евгений О.
2989 повідомлень
#15 років тому
Цитата ("dervinar"):
В нормальных языках программирования это хотя бы можно делать) В PHP при любых проблемах с памятью приходится заявлять "баг интерпретатора".

Ну вроде как обещали в будущем ввести возможность работы с памятью. А пока можно считать "издержками производства".
А глюков, собственно, в любых языках предостаточно...
Максим В.
731 повідомлення
#15 років тому
PHP Version 5.2.12 - по первому скрипту выводит значение $temp1
Андрей К.
1172 повідомлення
#15 років тому
Так и придется кодить этот скрипт прямо на сервере, там хоть работает нормально. Жду следующего релиза под убунту.
Виктор Т.
1036 повідомлень
#15 років тому
Попробуйте убрать unset`ы
Андрей К.
1172 повідомлення
#15 років тому
Так в последнем примере их и нет. Проблема возникает строго после очередного запроса в базу. Причем даже если написать mysql_query('SELECT id FROM table LIMIT 1'; без использования каких либо переменных, то получается такой баг. Видимо ошибка в модуле mysql.so
Анатольевич В.
137 повідомлень
#15 років тому
Lisio, напрасно вы так. elosoft, между прочим прав. Вы бы не писали так уверенно о скриптовых языках, интерпретаторах, если до конца не разбираетесь в этом.
Андрей К.
1172 повідомлення
#15 років тому
klimz, я достаточно хорошо разбираюсь в том, как именно работает php, когда не глючит. unset никогда не исполнится после следующего за ним оператора. Считаете иначе? Приводите пример.

В тему про неожиданную многопоточность:
Себастьян Ф.
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.
Андрей К.
1172 повідомлення
#15 років тому
Проблема отправлена в баг-трекер PHP