|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
GENERER UN VOLUME IMPORTANT DE DONNEES SANS SE HEURTER AU TIMEOUT PHP
Information sur la source
Description
Ceci est une petite astuce sur laquelle je travaille en ce moment.
Ce n'est pas parfait, mais ça fonctionne.
A vous de l'adapter à vos besoins...quant à moi, je travaillerai plus avant dans ce sens.
Cette astuce vous permet de générer un volume important de données avec PHP, sans être bloqué par le timeout (time_limit) de PHP.
Dans ce code, j'ai fixé le timeout à 5 secondes, et je m'amuse à afficher les chiffres de 1 à 50000
J'utilise les requêtes XMPLHTTP (AJAX) pour ça.
Ajout d'une version pour fichiers texte...avec cette fois, un timeout fixé à 2 secondes, et un fichier de 5000 lignes.
Source
- Fichier buffer.php
-
- <?php
- set_time_limit (5);
- $iSize = filesize ('texte.txt');
- ?>
- <?xml version="1.0" encoding="ISO-8859-1"?>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
- <script type="text/javascript">
- if (window.XMLHttpRequest) {
- oXmlhttp = new XMLHttpRequest();
- } else if (window.ActiveXObject) {
- oXmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
- }
-
- function display (iLine, iLimit, iStep) {
- var j = iLine + iStep;
- oXmlhttp.open('POST','buffer_.php');
- oXmlhttp.onreadystatechange=function() {
- if (oXmlhttp.readyState==1) {
- document.getElementById ('msg').firstChild.data = 'Chargement';
- }
- if (oXmlhttp.readyState==2) {
- document.getElementById ('msg').firstChild.data = 'Chargé';
- }
- if (oXmlhttp.readyState==4 && oXmlhttp.status == 200) {
- document.getElementById ('msg').firstChild.data = 'OK';
- document.getElementById ('divContent').firstChild.data += oXmlhttp.responseText;
- if (j < iLimit) {
- display (j, iLimit, iStep);
- }
- }
- }
- oXmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
- var data = 'iLine='+iLine;
- oXmlhttp.send (data);
- }
- function displayFile (iOctet, iLimit, iStep, sFile) {
- var j = iOctet + iStep;
- oXmlhttp.open('POST','bufferF_.php');
- oXmlhttp.onreadystatechange=function() {
- if (oXmlhttp.readyState==1) {
- document.getElementById ('msg').firstChild.data = 'Chargement';
- }
- if (oXmlhttp.readyState==2) {
- document.getElementById ('msg').firstChild.data = 'Chargé';
- }
- if (oXmlhttp.readyState==4 && oXmlhttp.status == 200) {
- document.getElementById ('msg').firstChild.data = 'OK';
- document.getElementById ('divContent').firstChild.data += oXmlhttp.responseText;
- if (j < iLimit) {
- displayFile (j, iLimit, iStep, sFile);
- }
- }
- }
- oXmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
- var data = 'iOctet='+iOctet+'&iStep='+iStep+'&sFile='+sFile;
- oXmlhttp.send (data);
- }
- </script>
- </head>
- <body>
- <div id="msg">Attente</div>
- <div id="divContent" style="width: 500px;"> </div>
-
- <script type="text/javascript">
- displayFile (0, <?php echo $iSize; ?>, 1024, 'texte.txt');
- </script>
- </body>
- </html>
-
- ------------------------------------
- Fichier buffer_.php
-
- <?php
- set_time_limit (5);
- if (isset ($_POST['iLine'])) {
- $sChaine = '';
- for ($i = $_POST['iLine']; $i < $_POST['iLine'] + 10; $i ++) {
- $sChaine.= $i.' | ';
- }
- echo $sChaine;
- }
- ?>
-
- ---------------------------------------------------
- Fichier bufferF_.php
-
- <?php
- set_time_limit (2);
- if (isset ($_POST['iOctet'])) {
- $sChaine = '';
- $fp = fopen ($_POST['sFile'], 'r');
- fseek ($fp, $_POST['iOctet'], SEEK_SET);
- $sChaine .= fread ($fp, $_POST['iStep']);
- fclose ($fp);
- echo $sChaine;
- }
- ?>
Fichier buffer.php
<?php
set_time_limit (5);
$iSize = filesize ('texte.txt');
?>
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<script type="text/javascript">
if (window.XMLHttpRequest) {
oXmlhttp = new XMLHttpRequest();
} else if (window.ActiveXObject) {
oXmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
function display (iLine, iLimit, iStep) {
var j = iLine + iStep;
oXmlhttp.open('POST','buffer_.php');
oXmlhttp.onreadystatechange=function() {
if (oXmlhttp.readyState==1) {
document.getElementById ('msg').firstChild.data = 'Chargement';
}
if (oXmlhttp.readyState==2) {
document.getElementById ('msg').firstChild.data = 'Chargé';
}
if (oXmlhttp.readyState==4 && oXmlhttp.status == 200) {
document.getElementById ('msg').firstChild.data = 'OK';
document.getElementById ('divContent').firstChild.data += oXmlhttp.responseText;
if (j < iLimit) {
display (j, iLimit, iStep);
}
}
}
oXmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
var data = 'iLine='+iLine;
oXmlhttp.send (data);
}
function displayFile (iOctet, iLimit, iStep, sFile) {
var j = iOctet + iStep;
oXmlhttp.open('POST','bufferF_.php');
oXmlhttp.onreadystatechange=function() {
if (oXmlhttp.readyState==1) {
document.getElementById ('msg').firstChild.data = 'Chargement';
}
if (oXmlhttp.readyState==2) {
document.getElementById ('msg').firstChild.data = 'Chargé';
}
if (oXmlhttp.readyState==4 && oXmlhttp.status == 200) {
document.getElementById ('msg').firstChild.data = 'OK';
document.getElementById ('divContent').firstChild.data += oXmlhttp.responseText;
if (j < iLimit) {
displayFile (j, iLimit, iStep, sFile);
}
}
}
oXmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
var data = 'iOctet='+iOctet+'&iStep='+iStep+'&sFile='+sFile;
oXmlhttp.send (data);
}
</script>
</head>
<body>
<div id="msg">Attente</div>
<div id="divContent" style="width: 500px;"> </div>
<script type="text/javascript">
displayFile (0, <?php echo $iSize; ?>, 1024, 'texte.txt');
</script>
</body>
</html>
------------------------------------
Fichier buffer_.php
<?php
set_time_limit (5);
if (isset ($_POST['iLine'])) {
$sChaine = '';
for ($i = $_POST['iLine']; $i < $_POST['iLine'] + 10; $i ++) {
$sChaine.= $i.' | ';
}
echo $sChaine;
}
?>
---------------------------------------------------
Fichier bufferF_.php
<?php
set_time_limit (2);
if (isset ($_POST['iOctet'])) {
$sChaine = '';
$fp = fopen ($_POST['sFile'], 'r');
fseek ($fp, $_POST['iOctet'], SEEK_SET);
$sChaine .= fread ($fp, $_POST['iStep']);
fclose ($fp);
echo $sChaine;
}
?>
Historique
- 06 octobre 2006 12:44:38 :
- Ajout d'une version pour fichiers texte...avec cette fois, un timeout fixé à 2 secondes, et un fichier de 5000 lignes.
Sources du même auteur
Sources de la même categorie
Sources en rapport avec celle ci
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
problème de timeout [ par GoldPegasus ]
j'ai un problème de time out. je demande de réaliser un traitement a une page php mais le traitement dépasse les différents time o
Info sur settimelimit [ par Arnauti ]
Bonjour, je crois savoir que la fonction settimelimit() sert à modifier le timeout de php mais comment l'utiliser dans un script car chez
Traitement de date avant requete sql [ par sharkit ]
Bonjour à toute la communauté,Voici mon problème : J'ai un moteur de recherche par date (2 champs : debut et fin ) dont les dates
Traitement php sur un portion de fichier xml !!!! [ par charloteuf ]
Hello,J'ai bien lu les sujets précédents, mais je me demande si le parsing xml est possible pour ma méthode.En fait j'ai un fchier xml
Inserer des donnees dans ma base de donnee. [ par achillechimi ]
Bonjour, j,essai depuis des jours d,inserer environ 45 donnees dans une table(tableau) de ma base de donnees, jusqu,ici sans succes.Je voudrais savoir
Récupération de données aléatoire avec un SELECT [ par frfx ]
Bonjour,J'ai fait une base de données clients avec mysql, l'insertion ou la modification de données s'efféctue sans problème,
Gerer un apostrophe et la recuperation des donnees dans un champs de formulaire [ par murrigane ]
Bonjour ! J'ai encore un soucis avec mon histoire de formulaire (a la fin je vais finir par devenir une pro sur le sujet...) Je recupere des val
while il ecrit plusieur fois les reponse [ par Pauldb ]
bonjour voila j'ai un script qui fonctionne (presque) tres bien sauf que lorsqu'il doit écrire les données ca ecrit une fois la phrase la pr
XmlHttpRequest (AJAX) [ par BenXbox ]
Salut à tous, Je cherche à actualiser une page avec le XmlHttpRequest(AJAX) toutes les 20 secondes. Cette page s'appel EnLigne.php Merci d'avance.
enlever un while [ par spiesalex ]
Salut tous le monde, <?php include('connect.php'); $reponse = mysql_query("SELECT * FROM tribunat ORDER BY ID DESC LIMIT 0,70"); while ($donnees =
|
Téléchargements
Logiciels à télécharger sur le même thème :
Comparez les prix Nouvelle version

HTC Touch HD
Entre 25€ et 605€
|