evrend yazdıBüyük boyutlu dosyaları ne için kullanıyorsunuz, nasıl bir işlem için gerekli açabilir misiniz? Database'den gelen büyük datalar mı bunlar yoksa tam anlayamadım.
@evrend kardeşim bu datalar veri tabanından gelen datalar değil onları stored procedur e mysql fonksiyonları ile sunucuda derleyip daha küçük viewler oluşturarak istediğim gibi hızlandırabiliyorum ancak bu datalar csv dosyaları mesela siteme üye olacak olan bir sitede 250 bin den fazla ürün olan csv var ve benim bu csv yi otomasyon içerisinde okumam ve veri tabanına yazmama gerekiyor ,tabii ki bunu yapıyorum csv yi parse edip okuyup verileri gerkeli alanlara yazıyorum ancak bu yazma işlemi çok uzun sürüyor işte büyük datadan kasdım bu ,kısaca csv yada xml gibi dış kaynaklı dosyalar
http://pf.tradedoubler.com/export/export?myFeed=14128976232443540&myFormat=14128976232443540
bu linkte yaklaşık 296900 adet ürün var ilk adım olarak ben bu linkdeki datanın boyutunu almama gerekiyor nedeni ise şu daha sonra güncelleme olup olmadığını anlayıp ona göre otomatik olarak benim de sistemde güncelleme yapamam için
Bunun için kullandığım kod şu :
$url="http://pf.tradedoubler.com/export/export?myFeed=14128976232443540&myFormat=14128976232443540";
Bu linki aşağıdaki static fonksiyonu çağıran fonksiyon gönderiyor
public static function getSizeRemote($url ,$readable = true) {
<!--CURL Kullanarak dosya boyutunu aldığım kod bu çoğu zaman büyük dosyalarda başarısız oluyor
Bu nednele bunu bıraktım-->
// return Http::http_request('GET',$url);
// $ch = curl_init($url);
// curl_setopt($ch, CURLOPT_HEADER, TRUE);
// curl_setopt($ch, CURLOPT_NOBODY, TRUE);
// curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// curl_exec($ch);
// $size = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD);
// curl_close($ch);
// return $size;
// Url parse ederek dosya boyutunu aldığım kod ///
$parsed = parse_url($url);
$host = $parsed["host"];
$fp = fsockopen($host, 80, $errno, $errstr, 20);
if (!$fp)
return false;
else {
fputs($fp, "HEAD $url HTTP/1.1\r\n");
fputs($fp, "HOST: $host\r\n");
fputs($fp, "Connection: close\r\n\r\n");
$headers = "";
while (!feof($fp))
$headers .= fgets($fp, 128);
}
fclose($fp);
$return = false;
$arr_headers = explode("\n", $headers);
foreach ($arr_headers as $header) {
// follow redirect
$s = 'Location: ';
if (substr(strtolower($header), 0, strlen($s)) == strtolower($s)) {
$url = trim(substr($header, strlen($s)));
return get_remote_file_size($url, $readable);
}
// parse for content length
$s = "Content-Length: ";
if (substr(strtolower($header), 0, strlen($s)) == strtolower($s)) {
$return = trim(substr($header, strlen($s)));
break;
}
}
if ($return && $readable) {
$size = $return;
}
$size = $return;
return $size;
}
Dosyayı okuyup veri tabanına gönderdiğim kod ise aşağıda bu da bu link için 2 saatten fazla sürüyor ve tabii ki connection time out oluyor :
$csvfile ="http://pf.tradedoubler.com/export/export?myFeed=14128976232443540&myFormat=14128976232443540";
$handle = fopen($csvfile, 'r');
$length=4096;
$delimeter = "|";
while (($data = fgetcsv($handle, $length, $delimeter, '"', '\\')) !== FALSE) {
ini_set("memory_limit", "7G");
ini_set('max_execution_time', '0');
ini_set('max_input_time', '0');
ignore_user_abort(true);
set_time_limit(0);
DB::connection()->disableQueryLog();
$gonder = [];
for ($x = 0; $x <= count($array_param_csv) - 1; $x++) {
$gonder['$paramCsv_' . $x] = $data[$data_arrayno[$x]];
$gonder['$tCol_' . $x] = $input_get_tCol[$x];
}
$anahtar = array_search('prod_id', $gonder);
$rakam = explode('_', $anahtar);
if (count($rakam) < 2) {
return 'Error Product ID column !!!! Please Select true Product Id column again !';
} else {
$productId = $gonder['$paramCsv_' . $rakam[1]];
// CHECK IF PRODUCTS PRICE IS ALLREADY IN DATABASE
$mpDB =Merchantsproduct::where('m_id', '=', $m_id)->where('prod_id', '=', $productId)->where('feed_id', '=', $id)->first();
$urun = 0;
if ($mpDB) {
$merch_id=$m_id;
$prodact_id = $productId;
$feedd_id = $id;
$message = 1;
$updateProduct = Merchantsproduct::where('m_id',$m_id)->where('prod_id',$productId)->where('feed_id',$id)->first();
for ($x = 0; $x <= count($array_param_csv) - 1; $x++) {
if ($updateProduct->not_found == 404) {
$column = $input_get_tCol[$x];
$datam = $data[$data_arrayno[$x]];
$updateProduct->$column = $datam;
$updateProduct->save();
}
if ($input_get_tCol[$x] != 'prod_image') {
$column = $input_get_tCol[$x];
$datam = $data[$data_arrayno[$x]];
$updateProduct->$column = $datam;
$updateProduct->save();
}
if ($input_get_tCol[$x] == 'prod_brand') {
$brands = Brand::where('name', '=', $data[$data_arrayno[$x]])->select('name')->first();
if (!$brands) {
$br = new Brand;
$br->name = $data[$data_arrayno[$x]];
$br->slug = Str::slug($data[$data_arrayno[$x]]);
$br->save();
}
}
}
$urun++;
} else {
$message = 0;
$insertProduct = new Merchantsproduct;
for ($x = 0; $x <= count($array_tCol) - 1; $x++) {
$column = $input_get_tCol[$x];
$datam = $data[$data_arrayno[$x]];
$insertProduct->$column = $datam;
$insertProduct->feed_id = $id;
$insertProduct->m_id = $m_id;
$insertProduct->m_name = $merc_name;
$insertProduct->cat_id = -1;
$insertProduct->cat_map = 0;
$insertProduct->save();
if ($input_get_tCol[$x] == 'prod_brand') {
$brands = Brand::where('name', '=', $data[$data_arrayno[$x]])->select('name')->first();
if (!$brands) {
$br = new Brand;
$br->name = $data[$data_arrayno[$x]];
$br->slug = Str::slug($data[$data_arrayno[$x]]);
$br->save();
}
}
}
}
}
$prods++;
unset($data);
}/* END WHILE */
//Not::$array_param_csv gibi arraylar formdan gelen selectlerin içeriklerini tesbit edip dolduruyor ve sonra bunları While içinden gelen csv datasının kolonlarıo ile buluşturuyor bu nedenle o değişkenlerin anlaşılabilmesi için tüm csv motorunu komple yazmak gerekeceğinden ve burada çok fazla kod yazmaya gerek olmadığından onları vermiyorum //
Bu şekilde yaptığımda bile bahsettiğim dosyanın sadece boyutunu öğrenmek 20 dakika sürdüğü oluyor
MURATSPLAT yazdı Queue olayından bahsediyorsun
Queue olayına baktım ama bu işi kuyruk olayına nasıl entegre edebileceğimi anlayamadım
Ben Laravel dokümentasyonda yeterli açıklamaların olmadığını sadece yüzeysel olarak açıklamalar yapıldığını düşünüyorum yada ben anlamakta zorluk çekiyorum o nedenle bu yüzeysel açıklamalar bana pek fazla ip ucu vermiyor , neredeyse tamamı işi bilen laravel uzmanlarına ufak tiyolar tarzında yazılmış gibi geliyor bana, bu benim fikrim ,yanlış olabilir ancak böyle düşünüyorum