PHP Неустранимая ошибка на номере строки, которая не существует

Неустранимая ошибка : разрешенный размер памяти 134217728 байт исчерпан (пытался выделить 523800 байт) в /Library/WebServer/Documents/XMLDataStore.class.php в строке 981

Любопытная вещь об этой ошибке – это не утечка памяти, которая была бы достаточно легкой для устранения неполадок. Скорее, это факт, что XMLDataStore.class.php имеет длину всего 850 строк, которые я проверил в нескольких текстовых редакторах.

Это связано с PHP 5.3 в комплекте с Snow Leopard. Я не использую кеш-код операции. Вот мой php.ini:

allow_url_fopen = Off error_reporting = -1 display_errors = 1 display_startup_errors = 1 date.timezone = 'America/Los_Angeles' output_buffering = Off realpath_cache_size = 0k 

Недавно XMLDataStore.class.php был реорганизован, и он был длиннее 981 строки. Это почти так, как будто PHP кэшировал 2-недельную версию и читает это. Я уверен, что текущая версия на /Library/WebServer/Documents/XMLDataStore.class.php составляет всего 850 строк.

Может ли это быть проблемой разрыва строки? т.е. интерпретатор PHP, нарушающий строки по-другому, чем ваш IDE / редактор? Я не знаю, как PHP обрабатывает линейные потоки Linux / Mac / Windows, но это может быть возможно. Можете ли вы создать фатальную ошибку где-нибудь в скрипте и посмотреть, какой номер строки он вам показывает?

Могут ли быть некоторые длинные строки в вашем коде (> 65535 символов), которые смешивают подсчет строк?

Также, что произойдет, если вы переименуете файл и включите его под новым именем? Это должно позаботиться о любых проблемах с кешем.

PHP Кажется, что проблемы с завершением строки стиля Macintosh не учитываются в конце комментариев. У меня возникла проблема после открытия файла на яблоке друзей. Я использовал kate для linux и Crimson Editor для Windows, чтобы изменить конец строки на стиль Unix, и номера строк работали нормально.

Если вы получаете ошибку на несуществующей строке, вполне возможно, что PHP кэширует ее. Возможно, попробуйте переименовать его, а затем выполните его.

Не уверен насчет Snow Leopard, но я использую его прямо сейчас и должен сказать, что есть много странных ошибок только с ОС, может быть и так.

Я испытал эту ошибку раньше, когда я обращался к БД и сохранял информацию в массиве, оказывается, я забыл, насколько велик БД и когда он передал МБ в стек, я получил эту ошибку и остановился. Если ситуация аналогична, используйте более тяжелый подход к процессору, например, connect, получите строку / блок / что-то, что-то, а затем вернитесь. Не проходите через все, сохраняйте все, а затем делайте что-нибудь.

Проверьте это: Ошибка выделения памяти Drupal.org

Надеюсь, это поможет, не уверенный, насколько это ясно. Возможно, покажите части своего сценария, чтобы понять, что может быть причиной этого.

Вот еще информация. Я пробовал один и тот же код на другом Mac с той же версией Snow Leopard, которая редко используется для разработки и не будет иметь версию этого файла, кэшированную – тот же результат.

Затем я попытался скопировать тот же код в ящик Solaris с PHP 5.2.8. Я все еще получаю ошибку памяти – это нормально и ожидаемо, конечно, поскольку она существует, но в сообщении об ошибке PHP сказано:

Неустранимая ошибка: максимальный уровень вложенности функции «100» достигнут, прерывается! в /export/www/htdocs/XMLDataStore.class.php в строке 741

Это имеет смысл, так как это первая строка метода, которая рекурсивно называется другим методом. Точный же код с теми же перерывами строк (LF) выписан в той же версии # из того же SVN-репозитория на всех трех машинах.

Ошибка в PHP 5.3.0 для Snow Leopard? 🙂

Хотя я понятия не имею, что может привести к неправильному подсчету строки (я использую PHP 5.3 на OSX 10.6 тоже. Нет проблем здесь.), Вы можете сузить фактическую ошибку, разделив ваш скрипт на более мелкие части. возможно, вы найдете реальное местоположение вашей ошибки.

И 850-строчный PHP-файл может серьезно использовать какой-либо рефакторинг.

Я тоже столкнулся с этой проблемой, но в моем случае (PHP 5.3 на Ubuntu / Nginix под php-fpm5) у меня был скрипт, который вызывал ошибку 500 без вывода (из-за того, что он был на производстве). При рассмотрении журнала ошибок упоминалась строка 589 на index.php, в которой были только строки, поднимающиеся до 453. Решение в моем случае было поддержкой для того, чтобы короткий тег был отключен при выпуске, но был включен для постановки …

то есть. <? был отключен, и <?php требуется для открытия PHP-тегов.

Ошибка в журнале, очевидно, не была полезной в моем случае, поэтому мне потребовалось некоторое время, чтобы устранить ее. Я оставляю это предложение здесь, надеясь, что он кого-нибудь сэкономит.