Jump to content

Test pointeur fopen() remplit ou vide


Recommended Posts

Bonjour à tous, j'utilise la fonction PHP fopen() afin d'extraire des données d'un fichier csv, seulement cela ne marche pas et j'aimerais savoir si quelqu'un avait connaissance d'un test me permettant de véréfier que mon pointeur pointe bien vers mon fichier.

J'ai effectué le test suivant :

FILE* $fp = NULL;
	    $fp = fopen('C:\Users\Philippe\Downloads'.$_POST['fichier'], 'r');
if ($fp = NULL)
{
   echo"echoue"; 
}
else if($fp != NULL)
{
   echo"success";
}

 

il n'affiche rien et impossible de faire marcher la fonction fgetcsv() donc si mon pointeur ne contient ni la valeur "NULL" ni mon fichier, que contient il?

Si j'effectue le test suivant :

FILE* $fp = NULL;
	    $fp = fopen('C:\Users\Philippe\Downloads'.$_POST['fichier'], 'r');
if ($fp = NULL)
{
   echo"echoue"; 
}
else
{
   echo"success";
}

 

Il m'affiche "success"

Voici la suite de monde code pour ceux que sa interesserai :

if(isset($_POST['fichier']))
    {
	    FILE* $fp = NULL;
	    $fp = fopen('C:\Users\Philippe\Downloads'.$_POST['fichier'], 'r');
if ($fp = NULL)
{
   echo"echoue"; 
}
else
{
   echo"success";
}
	    while ($data = fgetcsv($fp, 1000, ";"))
	    {
		    $num = count($data);
		    for ($c=0; $c < $num; $c++)
		    {
			    echo $data[$c] . "<br />\n";
			    $insert += $data[$c].", ";
			    if($num = $c)
			    {
				    $test = true;
			    }
		    }
	    }
	    fclose($fp);
    }

En vous remerciant d'avance de l'attention accordé à mon problême.

Link to comment
Share on other sites

Bonjour,

 

il semblerait que vous n'écrivez pas correctement l'opérateur sur la condition du If, il s'agit d'un double opérateur concernant "EGALE" c'est à dire :

if ($fp == NULL) {
   echo 'echoue';
}
elseif($fp  !=  NULL)
{
   echo 'success';
}

 

Cordialement

Link to comment
Share on other sites

merci infiniment pepitoww, effectivement je pouvais pas trouver la solution si mes test était mal construit ^^ je vais continuer de chercher un moyen de remplir ce pointeur.

 

fopen retourne false en cas d'échec, un pointeur sinon...

 

False étant différent de null ...

 

Ton code devrait plutôt ressembler à ça ;

 

$file = "c:\dossier/dossier2/monfichier.ext";
$fp = fopen($file);
if($fp)
{
  ...do something ...
}
else
{
  die('echec à l\'ouverture du fichier : '.$file);
}

 

Un autre problème est l'utilisation des antislashs dans le chemin de ton fichier : 'C:\Users\Philippe\Downloads...

Il faut savoir que si windows utilise des \ pour séparer les dossiers dans un chemin d'accès, ce n'est pas le cas du tout d'apache, issu de linux, dans lequel ce sont des slashes : /

Donc sur un wamp , si tu pars de la racine pour arriver dans un dossier apache , par ex c:\wamp\www , il est préférable d'utiliser / pour les dossiers suivants ... ex : c:\wamp\www/classes/....

 

Autre point , Users dans windows est un dossier protégé par utilisateur. Il y a peu de chance à mon sens qu'apache ait les droits suffisants pour sortir de sa racine et ainsi aller lire des fichiers un peu partout (et c'est un euphémisme) ....

 

Je te conseillerais de commencer par mettre le csv que tu veux charger dans le même répertoire que celui qui exécute le script.

Au moins pour éliminer des erreurs possibles ... Tu accèdes ainsi facilement à ton fichier :

 

$csvfile=dirname(__FILE__).'/monfichier.csv';

 

Dernier point, tu vas avoir un peu de mal si tu bloques déjà à ce stade de traiter ton fichier j'ai l'impression , surtout avec fopen.

Préfère la methode file_get_contents à fopen , qui t'évitera pas mal de déboires.

 

Je te donne un exemple basique qui charge monfichier.csv , le décortique en ligne , puis en champs.

On suppose que le fichier est dans le même dossier que le script :

 

$csvfile=dirname(__FILE__).'/monfichier.csv';  // fichier dans le dossier courant d'éxécution du script
$content = file_get_contents($csvfile); // contenu du fichier chargé dans $content
$lines = explode("\r\n", $content); // on place chaque ligne dans un tableau
foreach($lines as $line) // pour chaque ligne du tableau
{
$fields = explode(';', $line); // on place chaque champ dans le tableau $fields
........ ton code à toi ....
}

Edited by Broceliande (see edit history)
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...