Сбой PHP exec Java cmd с отказом в разрешении
В настоящее время я пишу несколько сценариев PHP, которые должны вызывать JAR. Я написал тестовый скрипт для тестирования Java -версии CMD.
echo exec('whoami');
echo '<hr/>';
exec('java -version', $out);
var_dump($out);
Страница возвращается, как показано ниже:
apache
array(6) { [0]=> string(134) "OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00007ff705000000, 2555904, 1) failed; error='Permission denied' (errno=13)" [1]=> string(1) "#" [2]=> string(76) "# There is insufficient memory for the Java Runtime Environment to continue." [3]=> string(100) "# Native memory allocation (malloc) failed to allocate 2555904 bytes for committing reserved memory." [4]=> string(57) "# An error report file with more information is saved as:" [5]=> string(29) "# /tmp/jvm-26720/hs_error.log" }
Я протестировал cmd в консоли, и это нормально.
[root@localhost ~]# java -version
java version "1.7.0_45"
OpenJDK Runtime Environment (rhel-2.4.3.3.el6-x86_64 u45-b15)
OpenJDK 64-Bit Server VM (build 24.45-b08, mixed mode)
Кто-нибудь может мне помочь с этим?
1 ответ
У меня была похожая проблема. Я продублировал его на RedHat 7 (установленном на Amazon EC2).
Только когда selinux был переключен в разрешающий режим - проблема была исправлена.
- Sudo или войдите как
root
- Чтобы проверить статус:
$ sestatus
или же$ getenforce
, - Чтобы выключить это:
- временный:
$ setenforce 0
, - навсегда: редактировать
/etc/selinux/config
файл
- временный:
После более глубокого исследования кажется, что лучше включить "apache для использования памяти", а не выключать режим:setsebool -P httpd_execmem 1
Больше информации здесь.