note 52602 modified in function.popen by danbrown

From: Date: Mon, 02 Mar 2009 13:39:38 +0000
Subject: note 52602 modified in function.popen by danbrown
References: 1  Groups: php.notes 
Request: Send a blank email to php-notes+get-151334@lists.php.net to get a copy of this message
I should say, my host uses a modified form of safe mode, so I don't know if that might have caused a problem with "popen" as opposed to "proc_open". With safe mode enabled, all words following the initial command string are treated as a single argument. Thus, echo y | echo x becomes echo "y | echo x". [Because of this,] LinixDude010's srcipt did not work for me. Seems wrong to read and write with popen, according to the manual. The script produced pgp text, but there was something wrong with the text and I could not decode it. This replacement script, using proc_open, which can read and write, DOES work: <?php function pgp_encrypt($keyring_location, $public_key_id, $plain_text) { $encrypted_text=''; $key_id = EscapeShellArg($public_key_id); putenv("PGPPATH=$keyring_location"); // encrypt the message $descriptorspec = array( 0 => array("pipe", "r"), // stdin 1 => array("pipe", "w"), // stdout 2 => array("pipe", "w") // stderr ?? instead of a file ); $process = proc_open("pgpe -r $key_id -af", $descriptorspec, $pipes); if (is_resource($process)) { fwrite($pipes[0], $plain_text); fclose($pipes[0]); while($s= fgets($pipes[1], 1024)) { // read from the pipe $encrypted_text .= $s; } fclose($pipes[1]); // optional: while($s= fgets($pipes[2], 1024)) { $encrypted_text.= "\n<p>Error: $s</p>\n"; } fclose($pipes[2]); } return $encrypted_text; } $message = pgp_encrypt("/home/username/.pgp", "to@domain.com", "dummy text to be encrypted"); print nl2br($message); ?> --was-- LinixDude010's srcipt did not work for me. Seems wrong to read and write with popen, according to the manual. The script produced pgp text, but there was something wrong with the text and I could not decode it. This replacement script, using proc_open, which can read and write, DOES work: <?php function pgp_encrypt($keyring_location, $public_key_id, $plain_text) { $encrypted_text=''; $key_id = EscapeShellArg($public_key_id); putenv("PGPPATH=$keyring_location"); // encrypt the message $descriptorspec = array( 0 => array("pipe", "r"), // stdin 1 => array("pipe", "w"), // stdout 2 => array("pipe", "w") // stderr ?? instead of a file ); $process = proc_open("pgpe -r $key_id -af", $descriptorspec, $pipes); if (is_resource($process)) { fwrite($pipes[0], $plain_text); fclose($pipes[0]); while($s= fgets($pipes[1], 1024)) { // read from the pipe $encrypted_text .= $s; } fclose($pipes[1]); // optional: while($s= fgets($pipes[2], 1024)) { $encrypted_text.= "\n<p>Error: $s</p>\n"; } fclose($pipes[2]); } return $encrypted_text; } $message = pgp_encrypt("/home/username/.pgp", "to@domain.com", "dummy text to be encrypted"); print nl2br($message); ?> http://php.net/manual/en/function.popen.php

« previous php.notes (#151334) next »