echec avec un programme externe

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : echec avec un programme externe

par callapa » 03 sept. 2007, 16:26

Content d'avoir pu t'aider :wink:

par callapa » 03 sept. 2007, 16:24

exemple qui fonctionne chez moi :
exec("C:\\xpdf\\pdftotext -raw -layout -nopgbrk C:\\xpdf\\mon_fichier.pdf C:\\xpdf\\conversion.txt",$retour,$exit);

par martial » 03 sept. 2007, 16:19

Tu avais raison Callapa ce n'était qu'une question de chemin. j'ai recopié le fichier pdftotext dans la racine (là ou se trouve le upload.php) et j'ai gardé le chemin csv_bin pour les fichiers
exec('pdftotext  -layout -raw -nopgbrk '.$dossier.' '.$fichier.' '.$dossier.''.$sort.''.$csv,$sum,$retour);
Merci beaucoup l'ami!

par callapa » 03 sept. 2007, 16:15

Tu as fait une erreur il me semble ici :
exec('csv_bin/pdftotext  -layout -raw -nopgbrk '.$dossier.' '.$fichier.' '.$dossier.''.$sort.''.$csv,$sum,$retour);
Essais plutot ceci :
exec('csv_bin/pdftotext  -layout -raw -nopgbrk '.$dossier.$fichier.' '.$dossier.$sort.$csv,$sum,$retour);   
en faisant en sorte que ta variable $dossier (qui contient le chemin absolu de ton répertoire) se termine par '\\' si tu es sous DOS
(ex: c:\\mes documents\\)

par martial » 03 sept. 2007, 15:06

Le probléme est que le fichier est transféré sur le serveur dans le repertoire csv_bin, le fichier se transfére bien. Dans ce même répertoire se trouve le pdftotext.exe
De plus quand je fais un

Code : Tout sélectionner

var_dump($sum); var_dump($retour);
Les variables renvoyées sont

Code : Tout sélectionner

array(0) { } int(1)
Normalement quand je fais
exec('csv_bin/pdftotext  -layout -raw -nopgbrk '.$dossier.' '.$fichier.' '.$dossier.''.$sort.''.$csv,$sum,$retour);  
var_dump($sum);
var_dump($retour);
Le pdftotext se lance mais ne trouve pas le fichier (int(1) soit:Error opening a PDF file.) qui pourtant est dans le même dossier
(quand je lance l'exe sous dos tous le fichiers sont dans le même dossier!)
Enfin quand j'affiche les variables en dur la synthaxe est bonne car j'obtiens

Code : Tout sélectionner

csv_bin/pdftotext -layout -raw -nopgbrk csv_bin/toto.pdf csv_bin/15_12_07.csv

par callapa » 03 sept. 2007, 14:16

Je pense avoir trouvé d'où venais le problème.

Indique le chemin complet (absolue) de ton fichier pdf (ex: c:\mes documents\document.pdf) et même chose pour ton fichier de sortie .txt (ex: c:\mes documents\ma_conversion.txt)

Si tu n'indiques pas le chemin complet ton programme pdftotxt ira chercher ton fichier pdf à l'endroit où se trouve ton script php.

par callapa » 03 sept. 2007, 14:10

j'ai testé pdftotext et le fichier d'aide nous donne quelques infos concernant les status de retour.

test ceci :
exec('csv_bin/pdftotext  -layout -raw -nopgbrk '.$fichier.' '.$sort.''.$csv,$sum,$retour); 
var_dump($sum);
var_dump($retour);
EXIT CODES
The Xpdf tools use the following exit codes:

0 No error.
1 Error opening a PDF file.
2 Error opening an output file.
3 Error related to PDF permissions.
99 Other error.

par martial » 03 sept. 2007, 11:10

tu ne t'es pas mal exprimé, c'est moi qui ait des lacunes en php.

quant à ta question
var_dump($sum);
me retourne

Code : Tout sélectionner

array(0) { }

par callapa » 02 sept. 2007, 20:10

je me suis mal exprimé peut être mais voiçi ce que tu dois faire :
exec('csv_bin/pdftotext  -layout -raw -nopgbrk '.$fichier.' '.$sort.''.$csv,$sum); 
var_dump($sum);

par martial » 02 sept. 2007, 18:15

la variable me renvoi NULL

en plus quand j'ecris
<?php
if (exec('csv_bin/pdftotext -upw cf627970 -layout -raw -nopgbrk '.$fichier.' '.$sort. $csv , var_dump($sum)))
         {	
             echo $sum ;	
?>
                           <br><br>
      <?php
         }
                 else
        {
	
?>
<br><br>
<?php
               echo echec de la conversion;
evidemment cela me retourne "Echec de la conversion"

par callapa » 02 sept. 2007, 17:47

Bonjour,

Il est normal que la variable $sum te renvoie un Array mais fais plutot un var_dump($sum) afin de savoir ce que contient cette variable.

par martial » 02 sept. 2007, 16:25

j'ai isolé ma commande et j'ai écrit
exec('csv_bin/pdftotext -layout -raw -nopgbrk toto.pdf toto.csv');
et puis
exec('csv_bin/pdftotext -layout -raw -nopgbrk toto.pdf toto.csv',$sum);
la variable

Code : Tout sélectionner

$sum
me retrourne Array
Mais rien ne se passe, pourtant j'avais mis les guillements où il fallait
$sort = date('H_i_s');
$csv= '.csv';	 
exec('csv_bin/pdftotext  -layout -raw -nopgbrk '.$fichier.' '.$sort.''.$csv,$sum);	
quand je fais un "echo" sur les variables cela me donne

Code : Tout sélectionner

$fichier---->toto.pdf $sort---->15_12_00 $csv----->.csv

par @rthur » 02 sept. 2007, 15:14

Bonjour,

Voici quelques pistes à essayer:
- Isole ta commande d'exécution dans une nouvelle page en mettant la valeur de tes variables "$fichier" en dur afin de faire des tests
- Vérifies que le chemin "csv_bin/pdftotext" est bien correct.
- L'utilisation de "start" est-elle utile?
- Récupère ce que retourne MS-DOS via le 2ème argument de la fonction exec() ou utilise la fonction system()

echec avec un programme externe

par martial » 02 sept. 2007, 12:58

bonjour à tous

derniérement j'ai trouvé un programme sous dos intitulé PDFTOTEXT, celui ci converti parfaitement les PDF en txt ou csv. En effet, une fois effectué la conversion j'insére le document CSV dans une base de données Mysql.
D'autre part, cela fait plusieurs jours que je plante sur les fonctions exec() shell-exec,etc.. de php. En effet je souhaiterais que une fois téléchargé sur le serveur le fichier PDF soit converti automatiquement en csv!
Dans le script qui suit, le fichier est bien téléchargé et la commande exec() ne génére pas d'erreurs ...mais voilà en fait rien ne se passe et le fichier PDF n'est pas converti.
(sous la ligne de commande Dos , pdftotext fonctionne parfaitement)
Voici le script
$dossier = 'csv_bin/';
$fichier = basename($_FILES['pdf']['name']);
$taille_maxi = 10000000;
$taille = filesize($_FILES['pdf']['tmp_name']);
$extensions = array('.pdf');
$extension = strrchr($_FILES['pdf']['name'], '.');
//Début des vérifications de sécurité...
if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
{
     $erreur = 'Vous devez uploader un fichier de type pdf ';
}
if($taille>$taille_maxi)
{
     $erreur = 'Le fichier est trop gros...';
}
if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
{
     //On formate le nom du fichier ici...
     $fichier = strtr($fichier, 
          'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 
          'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
     $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
     if(move_uploaded_file($_FILES['pdf']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
     {
          echo 'Upload effectué avec succès !';      
		  }
		  else //Sinon (la fonction renvoie FALSE).
     {
          echo 'Echec de l\'upload !';
     }
}
else
{
     echo $erreur;
	 } 
echo exec("start'csv_bin/pdftotext -layout -raw -nopgbrk $fichier.pdf $fichier.csv'");