Fatal error: Call-time pass-by-reference has been removed

Каждое новое обновление серверного программного обеспечения — это упражнение из области «и хочется, и колется…». Так и я решил наконец-таки устаревающий PHP5.2 оставить в прошлом (ведь он не умеет работать с многими новомодными плюшками), и перейти на PHP5.4.

Таким образом был обновлен PHP на одном из боевых серверов (с полутора дясятком разного рода сайтов). Реакция клиентов не заставила себя долго ждать, и сразу посыпались жалобы на поломанный в разных местах функционал.

Расскажу об одной из причин, вдруг кому-то пригодится.

Выполнение некоторых участков кода заваливалось с ошибкой «Fatal error: Call-time pass-by-reference has been removed in».

Оказалось, что новый PHP не разрешает использовать ссылку (&$arg) в вызове функции. К слову, PHP и раньше мог ругаться на такую конструкцию, правда всего-лишь на уровне Warning’ов. Новый PHP оказался строже, отдавая Fatal error при выполнении.

В это же время использование ссылки на аргумент в объявлении функции допускается и приветствуется.

Резюмирую.

Стоит избегать конструкций:
[code type=php]myFunc($arg1, &$arg2);[/code]

А использовать:
[code type=php]function myFunc($arg1, &$arg2) {}[/code]

Share

fpdf (ufpdf) «fatal error: allowed memory size of…»

В текущем проекте появилась необходимость делать экспорт некоторых документов в PDF. Один из лучших классов, существующих на сегодняшний день — fpdf. А если вам понадобится работать с кирилицей (utf-8), тогда вам понадобится ufpdf.
В один прекрасный момент работы с этим классом, я столкнулся с тем, что периодически и безсистемно при генерировании pdf-документа fpdf падает с ошибкой «fatal error: allowed memory size of…».
Погуглив нашел упоминания в сети о похожей проблеме, связанной с использованием колонтитулов в документе. Но в моих документах они не используются, и поэтому пришлось искать дальше. Ничего не нагуглив, начал искать ошибку методом исключения.
Ошибка оказалась в следующем. fpdf почему-то не очень любит вставлять изображения из сети, например:

$pdf->Image('http://yandex.st/morda-logo/i/l-logo-ua.png',10,80,'160','','PNG','');

Проблема решается просто. Изображение перед вставкой в документ надо сохранить на сервер любым способом (fopen(), file_get_contents(), etc..), и вставлять в документ уже из локального каталога.

Share

MySQL Incorrect integer value

Давно не обновлял на локальном сервере программное обеспечение, и тут после обновления mysql-сервера до версии 5.5 столкнулся с тем, что многое из написанного ранее вываливается с ошибкой mysql типа «1366 — Incorrect integer value». Всё из-за того, что в поля с автоинкрементными значениями я вставлял по старинке, оставляя значение этого поля пустым. Сейчас же требуется использовать значение NULL. Новый сервер mysql по-умолчанию работает со включенным strict-mode, и не позволяет использовать такие инсерты. Поэтому вариантов решения два:
1. переписать код и вставлять в автоинкрементные поля значения грамотно, используя NULL;
2. выключить strict-mode, закоментировав в my.ini (my.cnf) строку «sql-mode=»STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION»«.

Если меняете настройки mysqld, не забудьте потом перезагрузить сервис.

Share

Рождественская история, современный взгляд.

Много раз на протяжении праздников наталкивался на этот ролик, но посмотрел только сегодня. Отличная идея, создатели этого видео — молодцы. Рождественская история через призму современности. Пример того, как можно постараться передать Евангелие нынешней молодежи, не исказив при этом сути. 2000 лет назад Спаситель пришел в мир так же тихо, без царских почестей, об этом знал только определенный круг людей.

Он, по природе Бог, не держался за равенство с Богом, но добровольно лишился всего, приняв природу раба и человеком родившись. Он был во всем человеку подобен, но еще больше себя умалил и так был послушен, что принял и смерть саму — смерть на кресте. За это Бог вознес Его над всеми и Имя даровал превыше всех имен, чтобы пред именем Иисуса всякое колено преклонилось — на небе, на земле и в преисподней — и всяк язык провозгласил, что Иисус Христос — Господь, во славу Бога Отца.
Библия, современный перевод. Послание Филиппийцам 2:6-11.

Share

Небо над Европой отдыхает

Когда еще такое можно увидеть? Небо над Европой свободно от техники.

Это ясно показывает, что есть множество вещей, неподвластных человеку.

Share

Проба в записи gps-трека в самолете.

Добираясь в этот раз в Киев попробовал лететь со включенным GPS-навигатором. Даже когда под крылом плотная облачность и ничего не видно, на навигаторе можно наблюдать за своим перемещением, скоростью, высотой. Помогает разнообразить монотонное время перелета. 🙂

(далее…)

Share

Cочинение 7-летнего Тараса по теме «Кем я хочу стать когда я буду большим».

Я хочу стать программистом, когда вырасту большим, потому что это классная работа и простая. Поэтому в наше время столько программистов и всё время становится больше.
Программистам не нужно ходить в школу, им нужно учиться читать на компьютерном языке, чтобы они могли с компьютером разговаривать.
Думаю, что они должны уметь читать тоже, чтобы знать, в чём дело, когда все напереполох.
Программисты должны быть смелыми, чтобы не пугаться, когда всё перепуталось так, что никто не разберёт, или если придётся разговаривать на английском языке по-иностранному, чтобы знать, что надо делать.
У программистов должно быть хорошее зрение, чтобы видеть сквозь одежду и чтобы не бояться секретарш, потому что с ними приходится работать.
Еще мне нравится зарплата, которую программисты получают. Они получают столько денег, что не успевают их все тратить.
Это происходит потому, что все считают работу программиста трудной, кроме программистов, которые знают, как это просто.
Нет ничего такого, что бы мне не понравилось, кроме того что девочкам нравятся программисты и все хотят выйти за них замуж, и поэтому женщин надо гнать, чтобы не мешали работать.
Надеюсь, что у меня нет аллергии на офисную пыль, потому что на нашу собаку у меня аллергия.
Eсли у меня будет аллергия на офисную пыль, программиста из меня не получится и придётся искать настоящую работу.

Взято у http://belangel.livejournal.com

Share

Ubuntu

После недолгих колебаний решил снова вернуться на Ubuntu linux. Пользовался им несколько лет назад, когда не было безлимитного интерента, и тогда это было конкретным мучением, приходилось тяжелые пакеты или искать на дисках, или же обходиться без них.
Сейчас с безлимиткой — это совсем другое дело.

Share

On-line хранилище данных

По наводке от ponedilok.livejournal.com узнал о полезной программе Dropbox.
Для тех, кто использует более одного компьютера, сервис позволяет удобно использовать файловое хранилище on-line. Бесплатно выделяется 2gb под ваши нужды. Если зарегистрируетесь по этой ссылке, то вам накинут еще бонус 250mb.

Share