Dépassement du temps d'execution (30s)

Eléphant du PHP | 291 Messages

26 févr. 2009, 21:24

Bonsoir,

Je lance la fonction dbclean() lors de la soumission d'un formulaire, voici le code :
<?php

function clean_db($dbname){
		$date = date("d-m-Y",time());										
		$path = './DATA/clean/'.$date;
		
		if(!is_dir($path)){
			mkdir($path, 0755);			
		}
	
		$sql = "SHOW TABLE STATUS FROM $dbname";
		$req = mysql_query($sql);
		compte_requete();

		while ($donnees = mysql_fetch_array($req)){
			$table = $donnees[0];
			$sql = "SHOW TABLE STATUS FROM $dbname";
			$req = mysql_query($sql);
			compte_requete();
			
			if($req){
				$insertions = "";
				$tableau = mysql_fetch_array($req);
				$tableau[1] .= ";";
				$dumpsql[] = str_replace("\n", "", $tableau[1]);
				$sql = "SELECT * FROM $table";
				$req_table = mysql_query($sql);
				compte_requete();
				$nbr_champs = mysql_num_fields($req_table);
				while ($ligne = mysql_fetch_array($req_table)){
					$insertions .= "INSERT INTO $table VALUES(";
					for ($i=0; $i<=$nbr_champs-1; $i++){
						$insertions .= "'" . mysql_real_escape_string($ligne[$i]) . "', ";
					}
					$insertions = substr($insertions, 0, -2);
					$insertions .= ");\n";
				}
				if ($insertions != ""){
					$dumpsql[] = $insertions;
				}
			}
		}

		file_put_contents($path."/sqldump-".$dbname."-".date("Ymd-His").".sql", implode("\r", $dumpsql));

	}

?>
Ce code n'est pas de moi mais il fonctionne bien. Le problème est que je suis en hébérgement mutualisé et que je n'ai pas le droit de modifier le .ini de configuration

Comment pourrais-je modifier cette fonction pour quelle aboutisse ?
J'ai vu qu'il existait sleep() et usleep() mais je ne sait pas si c'est ce qu'il me faut et surtout ou les placer.

Merci pour votre aide.

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

26 févr. 2009, 22:46

tu peux faire un ini_set() comme ça par exemple, au début de ton script:
ini_set("max_execution_time", 3600); // 1H d'excéution Max 
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène