Назад | Перейти на главную страницу

Как указать PHP на каталог OpenSSL в скрипте?

У меня есть сценарий PHP, который должен указывать на каталог openssl моего сервера, но я потерялся. Я знаю, что каталог находится в / usr / bin / openssl, а страницы моего сайта - в /var/www/vhosts/domain/httpdocs/test.php.

В test.php я пытаюсь вызвать каталог openssl, используя относительные пути в / usr / bin / openssl, но я знаю, что это вызывает проблему. Кто-нибудь может помочь?

PHP-скрипт, который пытается вызвать openssl для шифрования сертификата:

<?php

// ранее в файле $ operatingos было установлено значение true или false в зависимости от ОС.
if (! $ operatingos) {

#PRIVATE KEY FILE
$MY_KEY_FILE = "my-prvkey.pem";

#PUBLIC KEY FILE
$MY_CERT_FILE = "my-pubcert.pem";

#PAYPAL PUBLIC CERTIFICATE
if(!$testingservices) {
    $PAYPAL_CERT_FILE = "paypal_cert.pem"; //LIVE
} else {
    $PAYPAL_CERT_FILE = "paypal_cert_sandbox.pem"; //SANDBOX
}

#PATH TO OPENSSL BINARY
$OPENSSL = "/usr/bin/openssl";      

} else {

#PRIVATE KEY FILE
$MY_KEY_FILE = "C:\\xampp\\htdocs\\privkey.pem";

#PUBLIC KEY FILE
$MY_CERT_FILE = "C:\\xampp\\htdocs\\pubcert.pempem";

#PAYPAL PUBLIC CERTIFICATE
if(!$testingservices) {
    $PAYPAL_CERT_FILE = "C:\\xampp\\htdocs\\pppubcert.pem";
} else {
    $PAYPAL_CERT_FILE = "C:\\xampp\\htdocs\\pppubcert_sandbox.pem";
}

#PATH TO OPENSSL BINARY
$OPENSSL = "C:\\OpenSSL-Win32\\bin\\openssl.exe"; 

}

$form = array('cmd' => '_xclick',
        'business' => 'email',
        'cert_id' => 'certid',
        'lc' => 'US',
        'custom' => 'test',
        'invoice' => '',
        'currency_code' => 'USD',
        'no_shipping' => '1',
        'item_name' => 'Donation',
        'item_number' => '1',
    'amount' => '10'
    );


    $encrypted = paypal_encrypt($form);


function paypal_encrypt($hash)
{
    global $MY_KEY_FILE;
    global $MY_CERT_FILE;
    global $PAYPAL_CERT_FILE;
    global $OPENSSL;

    if (!file_exists($MY_KEY_FILE)) {
        echo "ERROR: MY_KEY_FILE $MY_KEY_FILE not found\n";
    }
    if (!file_exists($MY_CERT_FILE)) {
        echo "ERROR: MY_CERT_FILE $MY_CERT_FILE not found\n";
    }
    if (!file_exists($PAYPAL_CERT_FILE)) {
        echo "ERROR: PAYPAL_CERT_FILE $PAYPAL_CERT_FILE not found\n";
    }


    //Assign Build Notation for PayPal Support
    $hash['bn']= 'domain.PHP_EWP2';

    $data = "";
    foreach ($hash as $key => $value) {
        if ($value != "") {
            //echo "Adding to blob: $key=$value\n";
            $data .= "$key=$value\n";
        }
    }

    $openssl_cmd = "($OPENSSL smime -sign -signer $MY_CERT_FILE -inkey $MY_KEY_FILE " .
                        "-outform der -nodetach -binary <<_EOF_\n$data\n_EOF_\n) | " .
                        "$OPENSSL smime -encrypt -des3 -binary -outform pem $PAYPAL_CERT_FILE";

    exec($openssl_cmd, $output, $error);

    if (!$error) {
        return implode("\n",$output);
    } else {
        return "ERROR: encryption failed";
    }
};
?> 

Проблема заключалась в различии структур каталогов в системах Windows и Linux. С моей стороны довольно глупо, но требуются двойные косые черты в каталоге Windows