php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 20.10.2010, 12:59  
Erfahrener Benutzer
 
Registriert seit: 05.09.2007
Beiträge: 183
aha_01 befindet sich auf einem aufstrebenden Ast
Standard proc_open()

Hi,
ich möchte testweise für die Funktion proc_open() eine Datei löschen.
Ich habe extra für das Kommando "rm" die Option "-i" benutzt damit ich während dem Prozess noch einiges eingeben darf.

PHP-Code:
delete_file();
function 
delete_file() {
    
$descriptorspec = array(
    
=> array("pipe","r"),
    
=> array("pipe","w"),
    
=> array("file","./proc_open_log.txt","w")
    ) ;
    
// define current working directory where files would be stored
    
$cwd './' ;
    
// delete the file 'delete_me.txt'
    
$process proc_open('rm -i delete_me.txt'$descriptorspec$pipes$cwd) ;
    if (
is_resource($process)) {
      
// anatomy of $pipes: 0 => stdin, 1 => stdout, 2 => error log
      
fwrite($pipes[0], 'yes') ;
      
fclose($pipes[0]) ;
      
// print pipe output
      
echo "pipes[1]: ".stream_get_contents($pipes[1]) ;
      
// close pipe
      
fclose($pipes[1]) ;
      
// all pipes must be closed before calling proc_close. 
      // proc_close() to avoid deadlock
      
proc_close($process) ;
    }

Auf dem Browser bekomme die folgende Ausgabe:
Zitat:
pipes[1]:
In der Datei "proc_open_log.txt" wird nach der Ausführung folgendes eingeschrieben
Zitat:
rm: remove regular empty file `delete_me.txt'? rm: cannot remove `delete_me.txt': Permission denied
Ich habe die Datei auf rwx für alle gesetzt und trotzdem läuft es nicht???
Wenn ich das Script aus der Shell/Linux ausführe geht es, die Datei wird gelöscht aber durch den Browser (d.h. mit dem www-User) geht es nicht???

Hat einer ne Idee woran das liegen könnte???

Grüße
Aha
aha_01 ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 20.10.2010, 13:36  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.561
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

warum nimmst du nicht unlink dafür ?
eagle275 ist offline   Mit Zitat antworten
Alt 20.10.2010, 13:41  
Erfahrener Benutzer
 
Registriert seit: 05.09.2007
Beiträge: 183
aha_01 befindet sich auf einem aufstrebenden Ast
Standard

Ich brauche eigentlich proc_open() um eine SFTP-Connection zu testen. Ich habe den Befehl "rm -i ..." genommen nur damit ich die Funktion "proc_open()" testen kann.
Ziel ist ein gutes Beispiel für den Einsatz der Funktion proc_open wo man während dem Ablauf des Prozesses noch andere weitere Subprozessen ausführen kann.
aha_01 ist offline   Mit Zitat antworten
Alt 21.10.2010, 17:58  
Erfahrener Benutzer
 
Registriert seit: 05.09.2007
Beiträge: 183
aha_01 befindet sich auf einem aufstrebenden Ast
Standard

Hi,
ich versuche nur die Pipes auszugeben aber es funktioniert nicht, der Browser landet in einer unendliche Schleife wenn ich den Code unten ausführe .
Ist dieser Codeschnitt richtig so?
PHP-Code:
$process proc_open '/usr/local/bin/psftp',
                                array(
=> array("pipe","r"),
                                    
=> array("pipe","w"),
                                    
=> array("file","./proc_open_log.txt","w")
                                ), 
$pipes'./' );
if (
is_resource($process)) {
  print 
"PIPES: pipes[1]: ".stream_get_contents($pipes[1])."<br/>";
  
fwrite($pipes[0], 'open localhost') ;
  print 
"PIPES 0: pipes[0]: ".stream_get_contents($pipes[0])."<br/>";
  
fclose($pipes[0]) ;
  print 
"PIPES: pipes[1]: ".stream_get_contents($pipes[1])."<br/>";
  
fclose($pipes[1]);
  
$return_value proc_close($process);
 echo 
"command returned $return_value\n";

Für jede Hilfe bin ich sehr dankbar
Aha
aha_01 ist offline   Mit Zitat antworten
Alt 21.10.2010, 18:12  
Erfahrener Benutzer
 
Registriert seit: 17.07.2009
Beiträge: 223
PHP-Kenntnisse:
Fortgeschritten
Tiberius zeigte ein beschämendes Verhalten in der Vergangenheit
Tiberius eine Nachricht über ICQ schicken
Standard

Liegen denn auf Pipe 1 Daten an? Sonst wird stream_get_contents (fread tuts auch) solange blocken bis Daten kommen
Tiberius ist offline   Mit Zitat antworten
Alt 22.10.2010, 09:11  
Erfahrener Benutzer
 
Registriert seit: 05.09.2007
Beiträge: 183
aha_01 befindet sich auf einem aufstrebenden Ast
Standard

ich habe es nun so probiert:
PHP-Code:
$process proc_open '/usr/local/bin/psftp',
                                array(
=> array("pipe","r"),
                                    
=> array("pipe","w"),
                                    
=> array("file","./proc_open_log.txt","w")
                                ), 
$pipes'./' );
if (
is_resource($process)) {
  
//print "PIPES: pipes[1]: ".stream_get_contents($pipes[1])."<br/>";
  
fwrite($pipes[0], 'open localhost') ;
  print 
"PIPES 0: pipes[0]: ".stream_get_contents($pipes[0])."<br/>";
  
fclose($pipes[0]) ;
  
//print "PIPES: pipes[1]: ".stream_get_contents($pipes[1])."<br/>";
  
fclose($pipes[1]);
  
$return_value proc_close($process);
  print
"command returned $return_value\n";

und in der Ausgabe steht Folgendes:
Zitat:
PIPES 0: pipes[0]:
command returned 0
D.h. 'open localhost' wird nicht in die Pipe[0] geschrieben
Hat jemand ne Idee



Grüße
Aha
aha_01 ist offline   Mit Zitat antworten
Alt 22.10.2010, 11:26  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.561
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

wird schon - aber "nicht abgesendet" - du müsstest beim fwrite ein "\n" anhängen - außerdem gibts da bestimmt Puffergrößen zu beachten

und ansonsten .. mach mal debugging .. Error-reporting auf Maximum, echos einstreuen ..
eagle275 ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
proc_open, proc_open beispiel, php proc_open funktioniert nicht, proc_open php, php proc_open beispiel, proc_open liest nicht von pipe, proc_open php example, php popen funktioniert nicht, proc_open(), php proc_open beispiele, linux proc_open, beispiele php proc_open, php proc_open example, proc_open sftp, sftp proc_open example, proc_open funktioniert nicht, proc_open(, php proc_open, \proc_open beispiel\, 1 und 1 process proc_open

Alle Zeitangaben in WEZ +2. Es ist jetzt 22:39 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum