IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Système] fwrite : mauvais argument et file_get-contents sur gros fichier


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 90
    Points : 47
    Points
    47
    Par défaut [Système] fwrite : mauvais argument et file_get-contents sur gros fichier
    bonsoir,

    le fwrite de ce code (4eme ligne avant la fin) fait probleme : il me dit que le stream est invalide, pourtant le fichier en question existe.

    de plus, j'ai l'impression que le file_get_contents($url) de la fonction createBanList a besoin de temps pour rapatrier tout le fichier, y a t il besoin de temporiser et le cas échéant, comment ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    <?php
    session_start();
    $commentaireDebut = $_POST['cD'];
    $commentaireFin = $_POST['cF'];
    $_SESSION['statique'] = $_POST['static'];
    $fich=$_POST['file'];
    $latence=$_POST['latence'];
    $_SESSION['BAN'];
    if($latence)echo('<META HTTP-EQUIV="refresh" CONTENT="'.$latence.'; URL="AgnBanTor.php5">');
     
     
     
    function createBanList()
     /*recupère la liste des ip à cette adresse : http://tor.xenobite.eu:81/exported-files/tor_allnodes.csv  */
    {
    	$url = "http://tor.xenobite.eu:81/exported-files/tor_allnodes.csv";
    	$banList =file_get_contents($url);
    		$banList = str_replace(chr(10),",",$banList);
    		echo("<br/> ban liste creee le ".getenv($DATE_LOCAL));
    		$_SESSION['BAN'] = $banList.$_SESSION['statique'];
    		echo("<br/>voici la ban list".$_SESSION['BAN']);	
    }	
     
     
     
     
    function genereHtmlPlusBan($commentaireDebut,$commentaireFin,$fichier)
    {
    	$buffer='"'.$fichier.'"';
    	$fichier = $buffer;
    	echo($fichier);
    	$vraiCommentaireDebut = $commentaireDebut."<!--SET
    BAN-IP--"; 
    	$str = file_get_contents($fichier);//on copie le fichier dans une chaine
    	$posDebut = strpos($str,$commentaireDebut)+strlen($commentaireDebut)+17;
    	$posFin = strpos($str,$commentaireFin);
    	$strDebut = substr($str,0,$posDebut+1);
    	$strFin = substr($str,$posFin,strlen($str)-$posFin);
    	createBanList();
    	/*echo("<br/>*************debut : ".$strDebut."<br/>");
    	echo("<br/>*************fin : ".$strFin."<br/>");*/
    	$nouveauFichier = $strDebut.$_SESSION['BAN'].$strFin;
    	if (file_exists($fichier))
    	{
    		unlink($fichier);
    	}
    	$ouvre = fopen($fichier,"w");
    	fwrite($ouvre,$nouveauFichier); //c'est là qu'il plante, j'ai lu et relu les dox en vain ...
    }
    genereHtmlPlusBan($commentaireDebut,$commentaireFin,$fich);
     
     
     
    ?>
    merci à tout contributeur

  2. #2
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Points : 2 853
    Points
    2 853
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $fichier = 'test.txt';
    if (file_exists($fichier))
    {
    	unlink($fichier);
    }
     
    $ouvre = fopen($fichier,"w");
    fwrite($ouvre, $nouveauFichier);
    Ceci marche donc je vois pas pourquoi ton code ne marcherait pas.
    Test comme moi met un $fichier = 'test.txt'; avant le file_exists() et regarde si ca marche. Si ca marche l'erreur est plus haut.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 90
    Points : 47
    Points
    47
    Par défaut
    Merci mais ça marche pas, d'ou mon allusion au file_get_contents($url) de la fonction createBanList, a priori il a pas le temps de rapatrier tout le fichier correspondant à $url(je le vois grace à un echo), a part un error_reporting(E_STRICT); y'a quoi à faire pour debugguer ? est ce qu'il y a moyen de susprendre l'execution du code jusqu'a ce que la totalité de $url ait été récupérée via file_get_contents, le cas échéant, comment ?

    merci de ta contribution en tout cas, c'est bien aimable

  4. #4
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Points : 2 853
    Points
    2 853
    Par défaut
    Si c'est le file_get_contents() qui poserais problème tu n'a qu'a t'y prendre un ptit peu différemment. C'est à dire utiliser carrément la gestion des flux introduite à PHP5 en mettant le flux à l'état bloquant comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    $url = "http://tor.xenobite.eu:81/exported-files/tor_allnodes.csv";
     
    // Ouverture du flux
    $handle = fopen($url, 'r');
     
    // 1 = bloquant; 0 = non-bloquant
    stream_set_blocking($handle, 1);
     
    // récup du flux dans une chaine
    $str = stream_get_contents($handle);
     
    var_dump($str);
    Le var_dump me fait une chaine string(39789).

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 90
    Points : 47
    Points
    47
    Par défaut
    Perfect, un grand merci m'sieur, j'te payerais bien une bière

  6. #6
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Plusieurs éléments :

    file_get_contents() ne redonne pas la main au script tant qu'il na pas terminé de s'exécuter, ou qu'une directive de timeout du php.ini n'a pas été atteinte.

    Sinon, c'est if($ouvre) que tu dois utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ouvre = fopen($fichier, 'w');
    if($ouvre)
    {
       fwrite($ouvre, $nouveauFichier);
    }
    else
    {
       //erreur d'ouverture du fichier
    }
    Enfin, tu as une grosse faille de sécurité puisque tu utilises aveuglément $_POST['fichier'] comme nom de fichier système. Tu devrais utiliser une regex pour t'assurer qu'il n'y a que des caractères valides

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Exécution de script PHP sur gros fichiers .txt
    Par Tonii dans le forum Langage
    Réponses: 1
    Dernier message: 18/07/2014, 17h51
  2. Problème Scanner sur Gros fichier
    Par maccormick dans le forum Général Java
    Réponses: 3
    Dernier message: 21/02/2013, 09h47
  3. Gestion du resume download sur gros fichiers
    Par atrhacker dans le forum Langage
    Réponses: 0
    Dernier message: 10/02/2011, 20h54
  4. Fileupload : erreur sur gros fichier
    Par snopims dans le forum ASP.NET
    Réponses: 3
    Dernier message: 04/09/2009, 10h29
  5. Opération sur (gros) fichier
    Par sloshy dans le forum C
    Réponses: 8
    Dernier message: 24/10/2007, 19h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo