Fatal error: Cannot unset string offsets in

programmer_2006

Новичок
Ubuntu 10.10
Xampp сервер php 5.3.1
Ошибка вроде простая.

Вываливается на 94 строке определенного класса

93 if (! empty ($res['html']))
94 unset ($res['html']);

Вообще, по идее не должно быть Fatal error.

Если я запускаю проект не на Xampp сервере, а на стандартной сборке для линукса(php.5.3.3 и т.д.) из пакетов то ошибки нет, есть проблема другая, но она описана в др. топике.

Если правлю код и исправляю эту ошибку то идут ошибки на др. строках, а весь код я конечно переписывать не буду.

Может проблема в какой то настройке php или одного из его модулей? ини файлы сравнивал, вроде отличий не много.

На серваке(о нем мне нечего не известно) и у др. разработчика на маке проект работает.

Я знаю что проблема странная, но может кто то, что то подскажет.

Не знаю, что уже делать, только винду ставить.
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
по-идее сама ошибка как-то не будет лишней здесь.
 

programmer_2006

Новичок
по-идее сама ошибка как-то не будет лишней здесь.
Конечно не будет, просто не понятно почему на разных сборках поведение разное, на xampp-e она возникает, на стандартной сборке модулей из реп ее нет и у разработчика(основного) на маке все пашет.
И даже если я установлю винду нужен будет apc который судя по описанию собрать в винде не так легко, а готовый dll идут для версий пхп 5.2.х (для 5.3.х я не нашел), а нужна именно версия пхп 5.3 , так как в проекте используются: колбэки и позднее статическое связывание.

Пытаюсь поднять проект уже не один день и понимаю на сколько правильно использовать фрэймверки в проектах, за 4 года работы макс времени которое я тратил на поднятие проекта было 2 часа (с настройкой nginx + memcached + конвертации видео и т.д.)
 

programmer_2006

Новичок
programmer_2006, что тебе непонятно в тексте ошибки?
Мне в ней все понятно, я писал выше, что код я исправлял на рабочий, но я же не могу исправить код всего проекта, который писался год. И все таки проект рабочий и крутится на серваке и на машине основного разработчика.
Мне же то же надо как то объяснить руководству почему у меня не заводится проект.
И если я установлю винду, где гарантии, что все будет работать.
Ведь как правильно было замечено, ошибка то должна быть.
Кстати $res - это строка с html-кодом, поэтому в if заходит но unset сделать не может.
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Ты уверен, что $res - это массив?
var_dump($res) ?
 

fixxxer

К.О.
Партнер клуба
$res у тебя это строка а не массив, в итоге получается unset($res[ (int)'html' ]) => unset($res[0]) => некорректная операция со строкой
 

programmer_2006

Новичок
Ладно, парни спасибо. Явно ситуация вам немного не понятна, но мне тоже было не понятно :). Я то ошибку понимаю, и как исправить знаю, ед. я не понимаю почему проект не пашет у меня, а пашет у др. Но хрен с ним, уже начальству отписался и проблему объяснил.
Кто то из коллег попробует поднять проект под виндой, что бы удостоверится, что проблема не в линуксе.
 

Вурдалак

Продвинутый новичок
Так зачем говорить о целом проекте, когда тебе достаточно провести debug и понять в чём именно ошибка? Может быть на рабочем сервере до этого блока кода вообще не доходит или $res['html'] — массив.
 

newARTix

Новичок
programmer_2006
во ты их насмешишь :D
думаю будет достаточно написать:

93 if(!empty($res) && !is_array($res)) { trigger_error('Ёптыть, дык $res-то не массив! о_О'); }
94 else if (!empty ($res['html'])) { unset ($res['html']); }

Хотя дальше по сценарию все-равно будут ошибки, ибо надо учиться дебагать свой код. Mr_Max дал ссылку на исчерпывающий ответ.
 

programmer_2006

Новичок
Так зачем говорить о целом проекте, когда тебе достаточно провести debug и понять в чём именно ошибка? Может быть на рабочем сервере до этого блока кода вообще не доходит или $res['html'] — массив.
Доходит, я там дебажил.
 

programmer_2006

Новичок
programmer_2006
во ты их насмешишь :D
думаю будет достаточно написать:

93 if(!empty($res) && !is_array($res)) { trigger_error('Ёптыть, дык $res-то не массив! о_О'); }
94 else if (!empty ($res['html'])) { unset ($res['html']); }

Хотя дальше по сценарию все-равно будут ошибки, ибо надо учиться дебагать свой код. Mr_Max дал ссылку на исчерпывающий ответ.
Нечто подобное и писал, но дальше пошли ошибки, фиг с ним не моя проблема.
 

fixxxer

К.О.
Партнер клуба
я не понимаю почему проект не пашет у меня, а пашет у др
Если мне не изменяет память, в какой-то момент, кажется, с версии 5.3, некорректная работа со строковыми оффсетами - это не warning, а fatal error. Если считать, что выкидывание warning - это "пашет", ну... тогда ясно.
 

programmer_2006

Новичок
Если мне не изменяет память, в какой-то момент, кажется, с версии 5.3, некорректная работа со строковыми оффсетами - это не warning, а fatal error. Если считать, что выкидывание warning - это "пашет", ну... тогда ясно.
Спасибо, этого не знал, я пишу обычно другой код и с таким не сталкивался.
 
Сверху