[PHP] stdinput

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik probeer een scriptje te maken dat gebruik maakt van de outputbuffering methodes van PHP:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?
    unlink("test.zip");

    ob_start();

    $fp_in = fopen("php://stdin", "rw");
    $fp_ou = fopen("php://stdout", "rw");

  $test = `zip -9 -v -e test.zip test.txt`;
  printf($fp_in,"test");
  $output = fgets($fp_ou);


  fclose($fp_in);
  fclose($fp_ou);

  echo "\n\n\n\n";
  echo "OUTPUT:\n";
  echo "-------\n";
  echo "test: $test\n";
  echo "output: $output\n";

  ob_end_flush();
?>


1/ Op deze manier capture ik toch de in & output.
2/ waarom komt er dit dan als output:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
Enter password:
Verify password:

Resource id #4



OUTPUT:
-------
test:   adding: test.txt        (in=926) (out=504) (deflated 46%)
total bytes=926, compressed=516 -> 44% savings

output:


Wat ik dus eigenlijk wil is via PHP dat passwoordje ingeven.
(Nu is dat een passwoordje, maar ik zou dat ook willen weten voor het vervolg, voor andere invoer-prompts natuurlijk hé).

[ Voor 9% gewijzigd door Verwijderd op 19-11-2003 13:41 ]


Acties:
  • 0 Henk 'm!

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 11-09 11:19

chem

Reist de wereld rond

je doet een fget op een stdout :?
Hoe kan je de output nou capturen? 8)7

Klaar voor een nieuwe uitdaging.


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

De input en output slaan niet op het script dat jij aanroept, maar op je eigen script.

[ Voor 3% gewijzigd door Janoz op 19-11-2003 13:47 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Is er niets waardoor je dan een prompt kan invullen in een script dat je aanroept?

fgets op output ... Tja, ik wou gewoon die "Enter password:" capturen...

Onderwijl heb ik ook gemerkt dat ik fwrite(...) moet gebruiken ipv fprintf of printf ;)
Dan is die "Resource..." weg

[ Voor 31% gewijzigd door Verwijderd op 19-11-2003 13:53 ]


Acties:
  • 0 Henk 'm!

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 11-09 11:19

chem

Reist de wereld rond

Dan moet je met ncurses aan de slag.

Klaar voor een nieuwe uitdaging.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ah owkee ... Zal ik dadelijk eens gaan lezen. Dank je voor je hulp alvast é ;)

Acties:
  • 0 Henk 'm!

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 11-09 11:19

chem

Reist de wereld rond

Ik bral trouwens, met ncurses krijg je die output van zip natuurlijk ook niet...

kan je niet gewoon een --password parameter oid doorgeven?

Klaar voor een nieuwe uitdaging.


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 15:36

Creepy

Tactical Espionage Splatterer

Je zult m.b.v. een pipe de output van de executable die je aanroept moeten redirecten.

Voorbeelden voor C/C++ zijn wel te vinden op het net (output redirection) maar of PHP dit ook kan??

Edit: Je kan ook heel flauw de output doorpipen naar een bestand, en dit bestand openen. Je zit dan dus wel steeds met een extra bestand, en je zult schrijfrechten op de juiste directory moeten hebbem
PHP:
1
$test = `zip -9 -v -e test.zip test.txt > blaat.txt`;

Test.txt zal nu alles bevatten wat zip naar de stdout heeft gestuurd.

[ Voor 49% gewijzigd door Creepy op 19-11-2003 14:09 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ja akkoord, maar ik wil het passwoord instellen/een prompt invullen... Normaal zou je dan zeggen ` echo 'test' | zip ... ` ... Maar ook dat wilt niets doen :S

En ik moet geen output krijgen hé ... Ik moet enkel input kunnen geven (2x het passwoord dus).

Acties:
  • 0 Henk 'm!

Verwijderd

Met popen een programma opstarten, en dan met fwrite de input er naar toe sturen.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Mja ... Dat schijnt toch al wat beter in elkaar te zitten:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?
    @unlink("test.zip");

    $dspec = array(
     0 => array("pipe", "r"),
       1 => array("pipe", "w"),
     2 => array("file", "/tmp/eo.txt", "a"),);

  $fp = proc_open("zip -9 -v -e test.zip test.txt", $dspec, $pipes);

  fwrite( $pipes[0], "test\n");
  fwrite( $pipes[0], "test\n");

  proc_close($fp);

    echo "OUTPUT:\n";
  echo "--------\n";
    echo `cat /tmp/eo.txt`;
    @unlink ("/tmp/eo.txt");
?>


Maar dit geeft hetvolgende als uitvoer:
code:
1
2
3
4
5
6
[steven@sql530 ziptest]$ php test.php
OUTPUT:
--------
Enter password:

zip error: Invalid command arguments (zero length password not allowed)


Dus :) die fwrite komt percies niet door ? Wat doe ik hier mis ?


**edit**
Wat ik hier juist "ontdekt" heb:

code:
1
2
3
4
[steven@sql530 ziptest]$ zip -9 -v -e test.zip test.txt 2> /dev/null
[steven@sql530 ziptest]$ zip -9 -v -e test.zip test.txt 1> /dev/null
Enter password:
Verify password:


maw ... Die enter passwoords worden op de error-output gezet ... En dus niet op de stdin/out... Normale prompts komen toch op de stdin te staan hé?

[ Voor 66% gewijzigd door Verwijderd op 19-11-2003 15:44 ]

Pagina: 1