Это сообщение об ошибке представлено, любые предложения?
Допустимый размер памяти 33554432 байт исчерпан (пытался выделить 43148176 байт) в php
Наконец я нашел ответ:
Просто добавьте эту строку ниже до того, как вы получите ошибку в вашем файле
ini_set('memory_limit', '-1');
Он будет использовать неограниченное использование памяти сервером, он работает нормально.
Спасибо, что предложили друзьям.
Вот два простых способа увеличить лимит на общем хостинге:
Если у вас есть доступ к вашему файлу PHP.ini, измените строку в PHP.ini. Если ваша строка показывает 32M, попробуйте 64M: memory_limit = 64M ; Maximum amount of memory a script may consume (64MB)
memory_limit = 64M ; Maximum amount of memory a script may consume (64MB)
Если у вас нет доступа к PHP.ini, попробуйте добавить его в файл .htaccess: php_value memory_limit 64M
В вашем скрипте слишком много памяти. Это может часто возникать в PHP, если у вас есть цикл, который закончился из-за контроля, и вы создаете объекты или добавляете массивы на каждом проходе цикла.
Проверьте наличие бесконечных циклов.
Если это не проблема, попробуйте и помогите PHP, уничтожив объекты, которые вы закончили, установив их в null. например. $OldVar = null;
Проверьте код, где происходит ошибка. Вы ожидаете, что эта линия будет выделять массивный объем памяти? Если нет, попытайтесь выяснить, что пошло не так …
Выполнение:
ini_set('memory_limit', '-1');
никогда не бывает хорошим. Если вы хотите прочитать очень большой файл, лучше всего скопировать его по частям. Попробуйте следующий код для лучшей практики.
$path = 'path_to_file_.txt'; $file = fopen($path, 'r'); $len = 1024; // 1MB is reasonable for me. You can choose anything though, but do not make it too big $output = fread( $file, $len ); while (!feof($file)) { $output .= fread( $file, $len ); } fclose($file); echo 'Output is: ' . $output;
К сожалению, легко программировать на PHP таким образом, который потребляет память быстрее, чем вы понимаете. Копирование строк, массивов и объектов вместо использования ссылок сделает это, хотя PHP 5 должен делать это более автоматически, чем в PHP 4. Но обработка вашего набора данных целиком на несколько этапов также расточительна по сравнению с обработкой наименьшего логического блока вовремя. Классический пример – работа с большими наборами результатов из базы данных: большинство программистов извлекают весь набор результатов в массив и затем чередуют его один или несколько раз с помощью foreach()
. Гораздо эффективнее использовать цикл while()
для извлечения и обработки одной строки за раз. То же самое относится к обработке файла.
Если вы хотите читать большие файлы, вы должны читать их пополам, а не читать их сразу.
Это простая математика: если вы одновременно читаете крупный файл размером 1 МБ, необходимо одновременно хранить не менее 1 МБ памяти для хранения данных.
Поэтому вы должны читать их по fopen
используя fopen
& fread
.
Вы можете увеличить память, разрешенную для скрипта php, выполнив следующую строку над всеми кодами сценария:
ini_set('memory_limit','-1'); // enabled the full memory available.
А также выделить ненужные переменные в скрипте.
Проверьте эту библиотеку php: освобождение памяти с помощью PHP
У меня также была такая же проблема, я искал файлы phpinfo.ini, php.ini или .htaccess безрезультатно. Наконец, я просмотрел некоторые php-файлы, открыл их и проверил коды внутри для памяти. Наконец, это решение было тем, с чем я пришел, и это сработало для меня. Я использовал wordpress, поэтому это решение может работать только для ограничения размера памяти WordPress. Мое решение, откройте файл default-constants.php в папке / public_html / wp-includes . Откройте этот файл с помощью редактора кода и найдите параметры памяти в области wp_initial_constants
или просто Ctrl + F, чтобы найти слово «память». Там вы перейдете через WP_MEMORY_LIMIT
и WP_MAX_MEMORY_LIMIT
. Просто увеличьте его, это было 64 МБ в моем случае, я увеличил его до 128 МБ, а затем до 200 МБ.
// Define memory limits. if ( ! defined( 'WP_MEMORY_LIMIT' ) ) { if ( false === wp_is_ini_value_changeable( 'memory_limit' ) ) { define( 'WP_MEMORY_LIMIT', $current_limit ); } elseif ( is_multisite() ) { define( 'WP_MEMORY_LIMIT', '200M' ); } else { define( 'WP_MEMORY_LIMIT', '128M' ); } } if ( ! defined( 'WP_MAX_MEMORY_LIMIT' ) ) { if ( false === wp_is_ini_value_changeable( 'memory_limit' ) ) { define( 'WP_MAX_MEMORY_LIMIT', $current_limit ); } elseif ( -1 === $current_limit_int || $current_limit_int > 268435456 /* = 256M */ ) { define( 'WP_MAX_MEMORY_LIMIT', $current_limit ); } else { define( 'WP_MAX_MEMORY_LIMIT', '256M' ); } }
Btw, пожалуйста, не делайте следующий код, потому что это плохая практика:
ini_set('memory_limit', '-1');
У нас была аналогичная ситуация, и мы опробовали данные в верхней части ответов ini_set ('memory_limit', '-1'); и все работало отлично, сжатые файлы изображений размером более 1 МБ в КБ.
пользователи wordpress добавляют строку:
@ini_set('memory_limit', '-1');
в wp-settings.php, который вы можете найти в установленной в wordpress корневой папке
Если вы пытаетесь прочитать файл, это займет память в PHP. Например, если вы пытаетесь открыть и прочитать файл MP3 (например, $ data = file (« http://mydomain.com/path/sample.mp3 »), он все равно потянет в память ,
Как предлагает Нельсон, вы можете работать, чтобы увеличить максимальный предел памяти, если вам действительно нужно использовать эту большую память.
Написать
ini_set('memory_limit', '-1');
в вашем index.php вверху после открытия тега php
Я не обновил свой хостинг, и база данных была доступна только для чтения. Joomla нужно было написать сеанс и не мог этого сделать.