- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Проблема не в этом. Я уже сталкивался с проблемой
Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 35 bytes) in C:\Program Files\VertrigoServ\www\FC\replase\replase.php on line 11
раньше, когда парсил файлы партнёрских магазинов. Файл в 5 мегабайт парсился, в 19 мегабайт - выдавал такую ошибку.
Проблема заключается в том, что лимит памяти на один процесс устанавливается хостером - и использовать скрипты, использующие функцию file() с большими файлами не представляется возможным, так как file() читает сразу весь файл в массив и забивает оперативку.
Проблема решается использованием другого пути - вот выкладываю - может кому-нибудь пригодится:
<?php
/**
* @author Gerkon
* @copyright 2008
*/
// Текстовый файл.
$file = "testfile.txt";
// Временный файл, который будет создаваться при работе скрипта.
$tmpfile = "testfile2.txt";
// Проверяем файл на доступность, чтобы не плодить мегабайты error_log'a
if (!file_exists($file))die("Исходного файла не существует!!");
// Открываем файл
$handle = fopen($file, "r");
// Создаем временный файл
$temp = fopen($tmpfile,"w+");
// До конца файла
while (!feof($handle)) {
// Читаем каждуюстроку
$buffer = fgets($handle, 14096); // Строка не должна быть больше 14096 байт! Если больше - меняем значение!
// Проверяем есть ли <H1> в начале и </H1> в конце
if (eregi("^<h1>",$buffer) && !eregi("</h1>",$buffer))
// Тогда добавляем закрытый тег
$buffer = str_ireplace("\n","</h1>\n",$buffer);
// И записываем строку во временный файл
fputs($temp,$buffer);
}
// Закроем дескрипторы файлов
fclose($handle);
fclose($temp);
// Удалим старый файл
unlink($file);
// Переименуем новый файл
rename($tmpfile,$file);
echo "Операция успешно выполнена!";
?>
Проблема не в этом. Я уже сталкивался с проблемой
Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 35 bytes) in C:\Program Files\VertrigoServ\www\FC\replase\replase.php on line 11
раньше, когда парсил файлы партнёрских магазинов. Файл в 5 мегабайт парсился, в 19 мегабайт - выдавал такую ошибку.
Проблема заключается в том, что лимит памяти на один процесс устанавливается хостером - и использовать скрипты, использующие функцию file() с большими файлами не представляется возможным, так как file() читает сразу весь файл в массив и забивает оперативку.
Проблема решается использованием другого пути - вот выкладываю - может кому-нибудь пригодится:
<?php
/**
* @author Gerkon
* @copyright 2008
*/
// Текстовый файл.
$file = "testfile.txt";
// Временный файл, который будет создаваться при работе скрипта.
$tmpfile = "testfile2.txt";
// Проверяем файл на доступность, чтобы не плодить мегабайты error_log'a
if (!file_exists($file))die("Исходного файла не существует!!");
// Открываем файл
$handle = fopen($file, "r");
// Создаем временный файл
$temp = fopen($tmpfile,"w+");
// До конца файла
while (!feof($handle)) {
// Читаем каждуюстроку
$buffer = fgets($handle, 14096); // Строка не должна быть больше 14096 байт! Если больше - меняем значение!
// Проверяем есть ли <H1> в начале и </H1> в конце
if (eregi("^<h1>",$buffer) && !eregi("</h1>",$buffer))
// Тогда добавляем закрытый тег
$buffer = str_ireplace("\n","</h1>\n",$buffer);
// И записываем строку во временный файл
fputs($temp,$buffer);
}
// Закроем дескрипторы файлов
fclose($handle);
fclose($temp);
// Удалим старый файл
unlink($file);
// Переименуем новый файл
rename($tmpfile,$file);
echo "Операция успешно выполнена!";
?>
Да, вот этот код работает лучше чем тот который я привел.
Более того - попробуйте его на VertrigoServ - я уверен, он не будет выдавать Fatal Error. Это очень удобно тем, что его можно использовать на любых хостингах.
Более того - попробуйте его на VertrigoServ - я уверен, он не будет выдавать Fatal Error. Это очень удобно тем, что его можно использовать на любых хостингах.
Все верно, ошибку не выдавал и на нем. Спасибо!
Всегда пожалуйста ;)
Есть еще 1 нужный скриптик для разбивки текста.
Имеем текст, его разбить на равные кусочки нужно.
Например по 3000 символов, этот параметр задается.
Далее, построчно считываем каждую строку, и суммируем кол-во символов, желательно без учета пробелов. Как только сумма >3000 вставляем новую строку, текст которой тоже что бы можно было менять, напрмиер "Часть 1", слово задается, а вот цифирка рядом задается соответственно тому какая это часть.
Почему именно >3000 а не ровно 3000, просто что бы он целиком считывал строку, а не обрывал на полуслове..
Может кто напишет? Буду признателен. Ну не селен я в ПХП :(
Стукните в аську 323918. Помогу.
Вопрос решен усилиями - gerkon, спасибо.