2015-04-25 4 views
0

Я пытаюсь запустить команду openssl через php, который обычно работает нормально, но есть одна конкретная команда, которую я пытаюсь запустить, которая не работает.using exec() с PHP для запуска команды

Вот команда запуска вручную, который работает отлично:

openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com" -keyout keyfile.key -out requestfile.csr

Например, вот OpenSSL в PHP, который делает работу:

exec('C:/xampp/apache/bin/openssl ecparam -out keyfile.key -name prime256v1 -genkey');

Та же команда через PHP НЕ работает ..

exec('C:/xampp/apache/bin/openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 -subj \'/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com\' -keyout keyfile.key -out requestfile.csr');

Я думаю, что что-то не так с деталями в двойных кавычках. «/ C =» может не интерпретироваться должным образом. если я делаю аналогичные вызовы openssl через php без частей в "", команда выполняется нормально.

Хотела знающий PHP человек, чтобы проверить, если его передается правильно или нет

Пожалуйста, не предложить мне использовать PHP встроенный в библиотеке OpenSSL, я хорошо осведомлен о них, и у меня есть все, что работа в другом проекте, но мне нужно использовать exec() для создания ключей ECC, которые недоступны в PHP, встроенной в библиотеку openssl.

+0

Вы используете это из командной строки с именем «php filename.php»? – kojow7

+0

У меня есть файл php с командой exec() внутри, и я просто запускаю эту php-страницу в веб-браузере. Команда без exec() - это тот, который я запускаю через командную строку и работает – user3436467

+0

Можете ли вы попробовать запустить скрипт php из командной строки вместо веб-браузера с помощью «php filename.php» – kojow7

ответ

0

Я не думаю, что Windows cmd.exe позволяет использовать одинарные кавычки для цитирования аргумента, вам нужно использовать двойные кавычки.

exec('C:/xampp/apache/bin/openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com" -keyout keyfile.key -out requestfile.csr'); 
+0

работает через командную строку, но не в браузере, как получилось? – user3436467

+0

Не знаю - есть ли ошибки в журнале PHP? – Barmar

+0

, в конечном итоге команде необходимо ссылаться на строковые переменные для создания запроса, то есть 'exec ('C:/xampp/apache/bin/openssl req -new -key'. $ Keyfile. '-out C:/xampp/htdocs/labs /test4/testcsr.txt -subj \ '/ C ='. $ country. '/ ST ='. $ state. '/ L ='. $ location. '/ OU ='. $ orgUnit. '/ O =' $ org. '/ CN ='. $ commonName. '\' '); 'но опять же, возможно, не получается заставить его работать из браузера = ( – user3436467

Смежные вопросы