PHP 8.5.0 Released!

Voting

: seven plus one?
(Example: nine)

The Note You're Voting On

snowleopard at amused dot NOSPAMPLEASE dot com dot au
17 years ago
I managed to make a set of functions to work with GPG, since my hosting provider refused to use GPG-ME.
Included below is an example of decryption using a higher descriptor to push a passphrase.
Comments and emails welcome. :)
<?php
function GPGDecrypt($InputData, $Identity, $PassPhrase, $HomeDir="~/.gnupg", $GPGPath="/usr/bin/gpg") {
 
 if(!is_executable($GPGPath)) {
 trigger_error($GPGPath . " is not executable",
 E_USER_ERROR);
 die();
 } else {
 // Set up the descriptors
 $Descriptors = array(
 0 => array("pipe", "r"),
 1 => array("pipe", "w"),
 2 => array("pipe", "w"),
 3 => array("pipe", "r") // This is the pipe we can feed the password into
 );
 // Build the command line and start the process
 $CommandLine = $GPGPath . ' --homedir ' . $HomeDir . ' --quiet --batch --local-user "' . $Identity . '" --passphrase-fd 3 --decrypt -';
 $ProcessHandle = proc_open( $CommandLine, $Descriptors, $Pipes);
 if(is_resource($ProcessHandle)) {
 // Push passphrase to custom pipe
 fwrite($Pipes[3], $PassPhrase);
 fclose($Pipes[3]);
 
 // Push input into StdIn
 fwrite($Pipes[0], $InputData);
 fclose($Pipes[0]);
 
 // Read StdOut
 $StdOut = '';
 while(!feof($Pipes[1])) {
 $StdOut .= fgets($Pipes[1], 1024);
 }
 fclose($Pipes[1]);
 
 // Read StdErr
 $StdErr = '';
 while(!feof($Pipes[2])) {
 $StdErr .= fgets($Pipes[2], 1024);
 }
 fclose($Pipes[2]);
 // Close the process
 $ReturnCode = proc_close($ProcessHandle);
 } else {
 trigger_error("cannot create resource", E_USER_ERROR);
 die();
 }
 }
 
 if (strlen($StdOut) >= 1) {
 if ($ReturnCode <= 0) {
 $ReturnValue = $StdOut;
 } else {
 $ReturnValue = "Return Code: " . $ReturnCode . "\nOutput on StdErr:\n" . $StdErr . "\n\nStandard Output Follows:\n\n";
 }
 } else {
 if ($ReturnCode <= 0) {
 $ReturnValue = $StdErr;
 } else {
 $ReturnValue = "Return Code: " . $ReturnCode . "\nOutput on StdErr:\n" . $StdErr;
 }
 }
 return $ReturnValue;
}
?>

<< Back to user notes page

AltStyle によって変換されたページ (->オリジナル) /