LINUX.ORG.RU

Вопрос по размеру файла

 


0

2

Исходные данные: я новичек. есть php файл index.php. когда я его запускаю под виндой в браузере, он мне генерит csv файл на серваке за 50мин размером примерно 15м.

Задача: кроном запускать index.php раз в час.

В винде я делаю так http://sssss.com и в папке на серваке генерится файл примерно 15м.

На линуксе делаю так curl http://sssss.com и в папке на серваке генерится файл примерно 2м и все.

Подскажите пожалуйста, куда копать?)



Последнее исправление: dokkomp (всего исправлений: 1)

когда я его запускаю под виндой в браузере

Скрипт в любом случае выполняется на сервере.

генерится файл примерно 15м
генерится файл примерно 2м

Вангую, что во второй раз данные уже читаются из кэша в оперативке.

Radjah ★★★★★
()

В 15М файле — только «FFFF», а в 2М — только «0000»? Или они полностью или частично совпадают? В порядке бреда: 15М файл состоит из 8 раз повторенного 2М файла.

justAmoment ★★★★★
()
Ответ на: комментарий от justAmoment

этот csv файл генерится из 6ти других по определенному алгоритму. так вот он частично генерится и дальше не хочет. на 2метрах тормозится, а когда запускаю в браузере все ок.

dokkomp
() автор топика
Ответ на: комментарий от dokkomp

Вопрос по существу. Этот index.php он где находится? У тебя на компе или на сервере? И есть ли доступ у тебя к его исходному коду?

justAmoment ★★★★★
()
Ответ на: комментарий от xtraeft

<?php

####################################### ## Обработка CSV файлов ## ## поиск товаров из одного файла CSV ## ## случайно в других пяти таблицах ## #######################################

function get_files($path, $order = 0, $mask = '*') { $fdir = array(); if (false !== ($files = scandir($path, $order))) { foreach ($files as $file_name) { if ($file_name != '.' && $file_name != '..' && fnmatch($mask, $file_name)) { $fdir[] = $file_name; } } } return ($fdir); }

$dir = «csv»; $dird1 = «d1»; $file_new = «result.csv»;

#echo «<b>В папке ».$dir." найдены следующие файлы</b>:<br>"; $filelist = get_files($dir, $order = 0, $mask = '*.csv');

$num_filelist = count($filelist);

foreach ($filelist as $filename) { $filename_utf = iconv(«cp1251», «UTF-8», $filename); #echo $filename_utf." "; $words = file_get_contents($dir.«/».$filename); // открываем файл и записываем в массив $words_arr = explode(«\n»,$words); $num = count($words_arr); // считаем, сколько фраз в файле print_r("(<b>".$num.«</b> строк)<br>»); } #echo «<br>Кол-во файлов: ».$num_filelist.«<br>»;

#echo «<br><b>Файл D1</b>:<br>»; $filelistd1 = get_files($dird1, $order = 0, $mask = '*.csv');

foreach ($filelistd1 as $filenamed1) { $filenamed1_utf = iconv(«cp1251», «UTF-8», $filenamed1); #echo $filenamed1_utf." "; $wordsd1 = file_get_contents($dird1.«/».$filenamed1); // открываем файл и записываем в массив $wordsd1_arr = explode(«\n»,$wordsd1); $numd1 = count($wordsd1_arr); // считаем, сколько фраз в файле print_r("(<b>".$numd1.«</b> строк)<br>»); }

#echo «<hr><br><br>»;

$numcol = 29;

// для каждого товара из D1

foreach ($wordsd1_arr as $tovar) {

if (isset($result)) { unset($result); } $result = array(); for ($i=1; $i<=$numcol; $i++) { // для каждой колонки перебираем все файлы $rand = rand(0,$num_filelist-1); // случайный номер файла, не используется #echo «<hr><b>Колонка ».$i.«</b><br>»; // перемешиваем массив файлов (так проще, чтобы потом их все перебрать) shuffle($filelist); #echo «Порядок перебора таблиц:<br>»; foreach ($filelist as $filename) { $filename_utf = iconv(«cp1251», «UTF-8», $filename); #echo «<b>».$filename_utf.«</b> »; $words = file_get_contents($dir.«/».$filename); // открываем файл и записываем в массив $words_arr = explode(«\n»,$words); $num = count($words_arr); // считаем, сколько фраз в файле print_r("(<b>".$num.«</b> строк)<br>»);

#echo «<b>».$tovar.«</b><br>»; $tovar = trim($tovar); $tovar_up = mb_strtoupper($tovar, 'UTF-8'); //#echo «Ищем в случайной таблице: ».iconv(«cp1251», «UTF-8», $filelist[$rand]).«<br>»;

#echo «Ищем в случайной таблице: ».iconv(«cp1251», «UTF-8», $filename).«<br>»; $wordstemp = file_get_contents($dir.«/».$filename); // открываем случайный файл и записываем в массив $wordstemp_arr = explode(«\n»,$wordstemp); $numtemp = count($wordstemp_arr); // считаем, сколько строк в файле #echo «Кол-во строк: ».$numtemp.«<br>»; // каждую строку в случайном файле проверяем на наличие в ней товара foreach ($wordstemp_arr as $stroka) { $nt = explode(";", $stroka); $nametovar = $nt[0]; $nametovar = trim($nametovar); $nametovar_up = mb_strtoupper($nametovar, 'UTF-8'); #echo «товар ».$nametovar; //#echo " (".strcasecmp($tovar, $nametovar).")"; //if (strcasecmp($tovar, $nametovar) == 0) { // #echo " <u>совпадение</u>"; //} //#echo «<br>»; //var_dump($tovar_up); //#echo " - "; //var_dump($nametovar_up); // если товар в таблице есть if ($nametovar_up == $tovar_up) { #echo " <u>совпадение</u>"; if ($nt[$i] AND !$result[$i]) { $result[$i] = str_replace(«\n», "", $result[$i]); $result[$i] = str_replace(«\r», "", $result[$i]); $result[$i] = $nt[$i]; // создаём массив с результатами #echo «<br><b>Записан результат в колонку ».$i." - ".$nt[$i].«</b><br>»; } } #echo «<br>»; }

} // конец перебора одной таблицы if (!$result[$i]) { $result[$i] = «qqq»; } } // конец для каждой колонки перебираем все файлы

# формируем результирующую строку для текущего товара $nextdata = $tovar.";";

$a = 1; foreach ($result as $opis) { if (isset($opis)) { trim($opis); $nextdata .= $opis.";"; } else { $nextdata .= ";"; } $a++; } $nextdata = trim($nextdata, ";"); $nextdata = $nextdata.«\n»;

#echo «Полученная строка: ».$nextdata.«<br>»;

# записываем полученную строку для текущего товара $f_o=fopen($file_new,«a+») or die(«Невозможно открыть/создать файл с результатами»); fwrite($f_o, $nextdata) or die ('Ошибка записи в файл'); fclose($f_o); #echo «Файл результатов обновлён<br>»;

unset($nextdata); #echo «<hr>»; } // конец для каждого товара

?>

dokkomp
() автор топика
Ответ на: комментарий от EXL

спасибо. исправил.

<?php

#######################################
##		Обработка CSV файлов 		 ##
## поиск товаров из одного файла CSV ##
## случайно в других пяти таблицах	 ##
#######################################

	function get_files($path, $order = 0, $mask = '*') {
	    $fdir = array();
	    if (false !== ($files = scandir($path, $order))) {
	        foreach ($files as $file_name) {
	            if ($file_name != '.' && $file_name != '..' && fnmatch($mask, $file_name)) {
	                $fdir[] = $file_name;
	            }
	        }
	    }
	    return ($fdir);
	}

$dir = "csv";
$dird1 = "d1";
$file_new = "result.csv";

#echo "<b>В папке ".$dir." найдены следующие файлы</b>:<br>";
$filelist = get_files($dir, $order = 0, $mask = '*.csv');

$num_filelist = count($filelist);

foreach ($filelist as $filename) {
	$filename_utf = iconv("cp1251", "UTF-8", $filename);
	#echo $filename_utf." ";
	$words = file_get_contents($dir."/".$filename);    // открываем файл и записываем в массив
	$words_arr = explode("\n",$words);
	$num = count($words_arr);               // считаем, сколько фраз в файле
	print_r("(<b>".$num."</b> строк)<br>");
}
#echo "<br>Кол-во файлов: ".$num_filelist."<br>";

#echo "<br><b>Файл D1</b>:<br>";
$filelistd1 = get_files($dird1, $order = 0, $mask = '*.csv');

foreach ($filelistd1 as $filenamed1) {
	$filenamed1_utf = iconv("cp1251", "UTF-8", $filenamed1);
	#echo $filenamed1_utf." ";
	$wordsd1 = file_get_contents($dird1."/".$filenamed1);    // открываем файл и записываем в массив
	$wordsd1_arr = explode("\n",$wordsd1);
	$numd1 = count($wordsd1_arr);               // считаем, сколько фраз в файле
	print_r("(<b>".$numd1."</b> строк)<br>");
}

#echo "<hr><br><br>";

$numcol = 29;

// для каждого товара из D1

foreach ($wordsd1_arr as $tovar) {

	if (isset($result)) { unset($result); }
	$result = array();
	
	for ($i=1; $i<=$numcol; $i++) { // для каждой колонки перебираем все файлы
	
	$rand = rand(0,$num_filelist-1); // случайный номер файла, не используется
	
	#echo "<hr><b>Колонка ".$i."</b><br>";
	
	// перемешиваем массив файлов (так проще, чтобы потом их все перебрать)
	shuffle($filelist);
	#echo "Порядок перебора таблиц:<br>";
	
	foreach ($filelist as $filename) {
		$filename_utf = iconv("cp1251", "UTF-8", $filename);
		#echo "<b>".$filename_utf."</b> ";
		$words = file_get_contents($dir."/".$filename);    // открываем файл и записываем в массив
		$words_arr = explode("\n",$words);
		$num = count($words_arr);               // считаем, сколько фраз в файле
		print_r("(<b>".$num."</b> строк)<br>");

			#echo "<b>".$tovar."</b><br>";
			$tovar = trim($tovar);
			$tovar_up = mb_strtoupper($tovar, 'UTF-8');
			//#echo "Ищем в случайной таблице: ".iconv("cp1251", "UTF-8", $filelist[$rand])."<br>";

	
			#echo "Ищем в случайной таблице: ".iconv("cp1251", "UTF-8", $filename)."<br>";
	
		$wordstemp = file_get_contents($dir."/".$filename);    // открываем случайный файл и записываем в массив
		$wordstemp_arr = explode("\n",$wordstemp);
		$numtemp = count($wordstemp_arr);               // считаем, сколько строк в файле
		#echo "Кол-во строк: ".$numtemp."<br>";
	
		// каждую строку в случайном файле проверяем на наличие в ней товара
		foreach ($wordstemp_arr as $stroka) {
			$nt = explode(";", $stroka);
			$nametovar = $nt[0];
			$nametovar = trim($nametovar);
			$nametovar_up = mb_strtoupper($nametovar, 'UTF-8');
			#echo "товар ".$nametovar;
			//#echo "  (".strcasecmp($tovar, $nametovar).")";
			//if (strcasecmp($tovar, $nametovar) == 0) {
			//	#echo " <u>совпадение</u>";
			//}
			//#echo "<br>";
			//var_dump($tovar_up);
			//#echo " - ";
			//var_dump($nametovar_up);
		
			// если товар в таблице есть
			if ($nametovar_up == $tovar_up) {
				#echo " <u>совпадение</u>";
				if ($nt[$i] AND !$result[$i]) {
					$result[$i] = str_replace("\n", "", $result[$i]);
					$result[$i] = str_replace("\r", "", $result[$i]);
					$result[$i] = $nt[$i];		// создаём массив с результатами
					#echo "<br><b>Записан результат в колонку ".$i." - ".$nt[$i]."</b><br>";
				}
			}
			#echo "<br>";
		
		}
		
		

	}	// конец перебора одной таблицы
	
	if (!$result[$i]) {
		$result[$i] = "qqq";
	}
	
	}	// конец для каждой колонки перебираем все файлы

# формируем результирующую строку для текущего товара
$nextdata = $tovar.";";

$a = 1;
foreach ($result as $opis) {
	if (isset($opis)) {
		trim($opis);
		$nextdata .= $opis.";";
	} else {
		$nextdata .= ";";
	}
	$a++;
}
$nextdata = trim($nextdata, ";");
$nextdata = $nextdata."\n";

#echo "Полученная строка: ".$nextdata."<br>";

# записываем полученную строку для текущего товара
$f_o=fopen($file_new,"a+") or die("Невозможно открыть/создать файл с результатами");
fwrite($f_o, $nextdata) or die ('Ошибка записи в файл');
fclose($f_o);
#echo "Файл результатов обновлён<br>";

unset($nextdata);
#echo "<hr>";
}	// конец для каждого товара





?>

dokkomp
() автор топика
Ответ на: комментарий от dokkomp

Может быть что-нибудь есть в error_log? Может быть что-нибудь есть в syslog?

slowpony ★★★★★
()

Дебажь, делай выводы принтами и поймёшь что не так.

Deleted
()
Ответ на: комментарий от dokkomp

Можно попробовать включить ignore_user_abort и посмотреть изменится ли ситуация:

ignore_user_abort(true);
set_time_limit(0);

В начало скрипта или php.ini.

xtraeft ★★☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.