Forum
Merhaba,
dizin.php sayfasında ajax ile zip.php dosyayı çalıştırarak belirlediğim klasörü zip yapıyorum ve lütfen bekleyin animasyonu çalışıyor zip yapma işlemi bittiğinde ajax a başarıyla zip yapıldı mesajı dönüyor BURADA SORUN YOK
Sorun şu: eğer zip yapılacak klasör 3-5-10GB boyutunda ise yani uzun sürecekse klasör zip yapılıyor ama ajax a zip bitti diye mesaj dönmüyor animasyon devamlı çalışıyor.
Bu sorun acaba uzun zaman sitede hareket olmadığı için oturum mu kapanıyor?
Eğer oturumla ilgili ise, zip.php dosyası zaten zip bitene kadar çalışıyor bunun içine nasıl bir kod eklesem ki zip.php çalıştığı müddetçe oturum açık kalsın?
Merhabalar;
Kodlarla ne yapılabilir görmeden birşey diyemiyorum fakat
php.ini' de session.gc_maxlifetime = 1440 default değerdir, 24 dakika sonra oturum kapanır. Bunu uzatarak işinizi çözebilirsiniz diye düşünüyorum.
Cevap için teşekkür ederim
Ben php bilmiyorum deneme yanılma ve bulduğun kodlarla kendimce birşeyler yapmaya çalışıyorum
Ben php.ini ile oynamak istemiyorum
Zip yapan kodlarım bu
Diğer sayfada ajax ile bu dosyayı çalıştırıyorum
Bu dosyanın başındaki ini_set kodlarıyla tarayıcı kapansa dahi işlem bitene kadar devam ediyor "bitti mesajı ortaya çıkıyor diye tahmin ediyorum"
Ajax olan sayfa ise hareket etmediği için oturum kapanıyor gelen mesajı gösteremiyor. Diye düşünüyorum
Eğer yorumum doğru ise şöyle birşey yapılabilirmi?
$("button").click(function(){
oturum zamanını uzat
animasyon_oynat_kodu
$.get("zipyap.php", function(data){
alert(data);
animasyonu_kapat_kodu
});
});
Bu örnek ajax kodunda animasyonun çalıştıran kod yeri ve zipyap.php sayfadan mesaj geldiğin animasyonu durduran kod yerleri görünüyor
Yani animasyon başladığında oturum açık kalması için bir şey yapılabilir mi?
<?php
session_start();
@ini_set('display_errors', true);
@ini_set('memory_limit', '-1');
@ini_set('max_execution_time', 60*60*24);
require_once("foldername.php");
require_once("login.php");
require_once("./includes/connection.php");
date_default_timezone_set('Europe/Istanbul');
if($_POST['zipyap'] == 1 AND isset($_POST['klasoradi'])){
$starttime = microtime(true);
$simdizaman = date("Y-m-d-H-i-s",time());
$rootPath = realpath(DIZINDIR.$_POST['klasoradi']);
// Initialize archive object
$zip = new ZipArchive();
// Dosya adı oluştur
$filename = ZIPDIR.$simdizaman."-".$_POST['klasoradi'].".zip";
$zip->open($filename, ZipArchive::CREATE | ZipArchive::OVERWRITE);
// Create recursive directory iterator
/** @var SplFileInfo[] $files **/
$files = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($rootPath),
RecursiveIteratorIterator::LEAVES_ONLY
);
// How many characters in the directory name
$foldernumber = strlen($_POST['klasoradi']);
foreach ($files as $name => $file)
{
// Skip directories (they would be added automatically)
if (!$file->isDir())
{
// Get real and relative path for current file
$filePath = $file->getRealPath();
$relativePath = substr($filePath, strlen($rootPath) - $foldernumber);
// Add directory name to archive comment
$zip->setArchiveComment($_POST['klasoradi']);
// Add current file to archive
$zip->addFile($filePath, $relativePath);
//echo "<pre>";
//print_r($relativePath);
//echo "<pre>";
}
}
// Zip archive will be created only after closing object
$ret = $zip->close();
$endtime = microtime(true);
function formatPeriod($starttime, $endtime) {
$duration = $endtime - $starttime;
$hours = floor($duration / 60 / 60);
$minutes = floor(($duration / 60) - ($hours * 60));
$seconds = floor($duration - ($hours * 60 * 60) - ($minutes * 60));
$milliseconds = ($duration - floor($duration)) * 1000;
return sprintf('%02d:%02d:%02d:%05.0f', $hours,$minutes,$seconds,$milliseconds);
}
if (file_exists($filename) AND $ret) {
echo "<b>".strtoupper($_POST['klasoradi'])."</b> Klasörü Başarıyla ZIP Formatına Sıkıştırıldı<br />";
echo '<br />Sıkıştırma Süresi: '.formatPeriod($starttime, $endtime).'';
} else {
echo "<b style='color: red'>BİR HATADAN DOLAYI ZIP DOSYASI OLUŞTURULAMADI</b>";
}
} // if($_POST['zipyap'] == 1 AND isset($_POST['klasoradi'])){
?>