Человек довольно быстро сделал то что мне было нужно, с учетом всех моих прибабахнутых пожеланий. Скрипт полностью работоспособен. Плюс, gerkon, добавил возможность многопоточной работы, хотя об этом я не просил, но было приятно получить такой бонус :) Работой доволен. В общении приятный человек с чувством юмора.
Заметил странную вещь, на многих сайтах есть исключенные из поиска станицы, по разным причинам, почему то когда начинается АП, ночью, в индексе показывает ВСЕ страницы, и те что вылетели и те что влетели новые, а к утру все возвращается на места, кроме новых, они остаются :)
Например по 3000 символов, этот параметр задается.
Далее, построчно считываем каждую строку, и суммируем кол-во символов, желательно без учета пробелов. Как только сумма >3000 вставляем новую строку, текст которой тоже что бы можно было менять, напрмиер "Часть 1", слово задается, а вот цифирка рядом задается соответственно тому какая это часть.
Почему именно >3000 а не ровно 3000, просто что бы он целиком считывал строку, а не обрывал на полуслове..
Может кто напишет? Буду признателен. Ну не селен я в ПХП :(
gerkon: Более того - попробуйте его на VertrigoServ - я уверен, он не будет выдавать Fatal Error. Это очень удобно тем, что его можно использовать на любых хостингах.
gerkon: Проблема не в этом. Я уже сталкивался с проблемой
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 "Операция успешно выполнена!";
?>
Да, вот этот код работает лучше чем тот который я привел.
С утра отписался в техподдержку. Ответа нет.
Это называется круглосуточная техподдержка?
Pavel2005 добавил 13.09.2008 в 15:37
Уже нет желания работать :)
Мне в течении суток ответили. Считаю нормальным. В бегуне мне отвечали от 3х до 5ти дней.
Оригинально :) Через robots.txt нельзя закрыть ссылку. Если уж такая жадность - редирект делайте, либо JS.
Во блин.. не знал.. Пошел капать как тогда можно код подправить
WhiteFalke добавил 07.09.2008 в 22:55
Помогла функция str_replace.
Вопрос решен усилиями - gerkon, спасибо.
Человек довольно быстро сделал то что мне было нужно, с учетом всех моих прибабахнутых пожеланий. Скрипт полностью работоспособен. Плюс, gerkon, добавил возможность многопоточной работы, хотя об этом я не просил, но было приятно получить такой бонус :) Работой доволен. В общении приятный человек с чувством юмора.
В будущем буду обращаться.
Заметил странную вещь, на многих сайтах есть исключенные из поиска станицы, по разным причинам, почему то когда начинается АП, ночью, в индексе показывает ВСЕ страницы, и те что вылетели и те что влетели новые, а к утру все возвращается на места, кроме новых, они остаются :)
Записался вторым. Отписал в Аську
Есть еще 1 нужный скриптик для разбивки текста.
Имеем текст, его разбить на равные кусочки нужно.
Например по 3000 символов, этот параметр задается.
Далее, построчно считываем каждую строку, и суммируем кол-во символов, желательно без учета пробелов. Как только сумма >3000 вставляем новую строку, текст которой тоже что бы можно было менять, напрмиер "Часть 1", слово задается, а вот цифирка рядом задается соответственно тому какая это часть.
Почему именно >3000 а не ровно 3000, просто что бы он целиком считывал строку, а не обрывал на полуслове..
Может кто напишет? Буду признателен. Ну не селен я в ПХП :(
Более того - попробуйте его на VertrigoServ - я уверен, он не будет выдавать Fatal Error. Это очень удобно тем, что его можно использовать на любых хостингах.
Все верно, ошибку не выдавал и на нем. Спасибо!
А страниц у сайта сколько? Внутренние морде тоже вес передают.
Проблема не в этом. Я уже сталкивался с проблемой
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 "Операция успешно выполнена!";
?>
Да, вот этот код работает лучше чем тот который я привел.