Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как выполнить скрипт (цикл чтения из файла) по шагам?
 
 автор: Zhenya   (19.11.2008 в 16:24)   письмо автору
 
 

Здравствуйте!
Подскажите пожалуйста, как можно выполнить скрипт (цикл чтения из файла) по шагам.
Такая ситуация:
Есть текстовый файл file.txt его размер 30Мб
Количество строк : Имястроки|значение1|значение2|...|значениеn \n - 20000
Хочу записать все данные из файла в базу данных mysql, но:

В какойто момент (примерно, когда количество записей достигнет ~ 6000) все отанавливается - страничка просто перестает грузиться.

set_time_limit(0) не катит...

Файл открывается:
$fh= fopen($fileName,"r");
начало цикла:
while ((!feof ($fh)))
{
$str=fgets($fh);
if ($str!="")
{

Пробую прочитать файл в массив (file($my_file)) - но в этом случае выскакивает ошибка файл слишком велик...
Локально - этот способ (как и первый без шагов) работает...

  Ответить  
 
 автор: Shorr Kan   (19.11.2008 в 16:26)   письмо автору
 
   для: Zhenya   (19.11.2008 в 16:24)
 

Запустите скрипт через ssh. Или, если нет ssh, то по крону (единожды).
Если нет ни того, ни другого - делайте по 1000 строк. Первую тысячу прочитали/записали в бд/стерли из файла/exit; Затем опять запускайте страничку.

  Ответить  
 
 автор: Zhenya   (19.11.2008 в 16:32)   письмо автору
 
   для: Shorr Kan   (19.11.2008 в 16:26)
 

а по крону разве процессорное время не учитывается?
про реализацию по 1000 можно примерчик как продолжение моих строк?

  Ответить  
 
 автор: Shorr Kan   (19.11.2008 в 16:36)   письмо автору
 
   для: Zhenya   (19.11.2008 в 16:32)
 

Если поставите set_time_limit(0) (то, которое вам не понраву), то крон обработает весь файл.
По 1000 - сейчас соображу.

  Ответить  
 
 автор: Zhenya   (19.11.2008 в 16:45)   письмо автору
 
   для: Shorr Kan   (19.11.2008 в 16:36)
 

да не, я о том, что скрипту не хватает времени на обработку файла, хотя установлено set_time_limit(0)
по 1000 буду благодарен

  Ответить  
 
 автор: Shorr Kan   (19.11.2008 в 17:06)   письмо автору
 
   для: Zhenya   (19.11.2008 в 16:45)
 

Я понял. Тем не менее, дело в браузере. Это он, зараза, устает ждать. А не сервер - обрабатывать. У крона нет браузера... Поэтому, по крону получится, если set_time_limit(0).

  Ответить  
 
 автор: Shorr Kan   (19.11.2008 в 17:05)   письмо автору
 
   для: Shorr Kan   (19.11.2008 в 16:36)
 

1) скопируйте файл (на всякий случай. Бэкап)
2)

<?
$fp
=fopen($filename,"r+");
$i=0;
while(!
feof($fp)){
$byte=ftell($fp);
$str=trim(fgets($fp));
if(
$str==" " or $str==""){continue;}
fseek($fp,$byte,SEEK_SET);
fwrite($fp," ");
$i++;
if(
$i==1000){break;}
}
//while
fclose($fp);
?>


Не проверял на большом файле, поэтому не могу сказать, что всё получится. Но должно.

  Ответить  
 
 автор: Trianon   (19.11.2008 в 20:46)   письмо автору
 
   для: Shorr Kan   (19.11.2008 в 16:26)
 

>Запустите скрипт через ssh. Или, если нет ssh, то по крону (единожды).
> Если нет ни того, ни другого - делайте по 1000 строк. Первую тысячу прочитали/записали в бд/стерли из файла/exit; Затем опять запускайте страничку.

Стерли из файла?!

  Ответить  
 
 автор: Shorr Kan   (19.11.2008 в 21:45)   письмо автору
 
   для: Trianon   (19.11.2008 в 20:46)
 

А что смущает-то? Строка у него, положим, в 300 байт. А мы, вместо него, ставим пробельчик - один байт. И? Его задачу выполняет. А к словам придираться... зачем?

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования