Newsgroup: it.comp.www.php
Titolo: exec bloccante...

Ciao a tutti,
sto provando ad eseguire uno script php che lanci un programma esterno
(pdftotext) per estrarre il testo da un file pdf.
In particolare faccio:
exec("/path/to/pdftotext $filename");
e dovrebbe produrre un file $filename ma con estensione txt.
Lo script sembra funzionare ma in realtà il browser rimane in attesa
infinita come se stesse caricando qualcosa.
So bene che exec() blocca l'esecuzione dello script, ma il tempo di
attesa è davvero troppo lungo (si tratta di pdf di poche pagine).
Inoltre, mi ritrovo il file txt completo (quindi il programma
pdftotext viene effettivamente eseguito), ma è come se il flusso non
ritornasse allo script principale.
Posso aver dimenticato qualcosa?
Ringrazio per qualsiasi aiuto
Saluti
Libra

Libra wrote:

[quoting 
http://php.net/exec
]
Note: If you start a program using this function and want to leave it
running in the background, you have to make sure that the output of that
program is redirected to a file or some other output stream or else PHP
will hang until the execution of the program ends.
[/quoting 
http://php.net/exec
]
-- 
www.iuz-lab.info

[/quoting 
http://php.net/exec
]
Questa condizione mi è chiara; diciamo che non mi interessa dover
aspettare che il programma termini.
Il fatto è che il programma SEMBRA terminare (infatti vedo il suo
output nella cartella dove è destinato) ma lo script php non va avanti
e rimane li in continuo caricamento.
Libra

 Libra
prova cosě:
exec("/path/to/pdftotext $filename>logfile.txt");
ciao Andrea

 exec("/path/to/pdftotext $filename>logfile.txt");
[..]
basterebbe un ' &' finale..
exec("pdftotext $filename &");
ma non riesco ad ottenere gli stessi comportamenti che ottiene Libra..
ho convertito due file di cui uno di dimensioni notevoli ed ho avuto un
ritorno relativamente veloce allo script..
hai testato la funzione pdftotext da shell per vedere i tempi di risposta?
(e' necessario richiamarla con l'indirizzo completo?)
puoi postare il codice interessato..
-- 
www.iuz-lab.info

 exec("pdftotext $filename &");
A: già, ma con la stranezza che gli capita sarebbe meglio vedere cosa 
sputa fuori pdftotext, magari si pianta su una richiesta di conferma di 
qualcosa. Potrebbe anche essere un banale problema di permessi per 
l'utente di apache...
Andrea


 l'utente di apache...
[..]
allora provare ad eseguire..
exec("pdftotext $filename &", $result, $return);
echo "Return code: $return<br /><pre>";
print_r($result);
-- 
www.iuz-lab.info

iuz ha scritto:

Anche così andrebbe bene, l'importante è vedere cosa esce fuori quando 
viene chiamato il comando shell con l'utente di apache, si potrebbe 
anche lanciare diretto da shell loggandosi con l'utente usato da apache...
ciao Andrea

puoi postare il codice interessato..
Si, pdftotext  lanciato da consolle risulta molto veloce, poiché i pdf
sono piuttosto piccoli.
Il codice è molto semplice: prendo i dati da una form
<?php 
session_start(); 
require_once('./configuration.php');
echo "<br><form enctype=\"multipart/form-data\" action=\"save.php\"
method=\"post\">\n";
echo "<br><center><input type=\"file\" name=\"paper\" /><br><br>\n";
echo "<input type=\"submit\" value=\"  Salva dati  \" /></center>\n";
echo "</form>\n";	
?>
e li salvo:
<?php 
session_start(); 
require_once('./configuration.php');
      if($_FILES['paper']['name'] != "")
				{			
      $dest_file = $repository_dir.$_FILES['paper']['name'];
 
      move_uploaded_file($_FILES['paper']['tmp_name'],$dest_file);
		 		}
  $exec_line = $xpdf_path.$dest_file;
  exec($exec_line, $result, $return);
 
  header("Location: index.php");
?>

l'utente di apache...
No, nessuna richiesta dal programma. Termina producendo il file txt
senza altre interazioni con l'utente.
Saluti
Libra

anche lanciare diretto da shell loggandosi con l'utente usato da apache...
Comincio a pensare che il problema sia da un'altra parte.........
Proverň ad indagare piů a fondo.
Grazie a tutti per i contributi, se risolvo faccio sapere.
Saluti
Libra