Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何设置PHP使用的shell?_Php - Fatal编程技术网

如何设置PHP使用的shell?

如何设置PHP使用的shell?,php,Php,我在linux上使用PHP作为apache模块。我还使用apparmor保护系统。当我想用simply mail()函数为自己发送邮件时,我注意到php想要执行shell(/bin/bash,因为/bin/sh是一个符号链接),即使我在php.ini中设置了/usr/sbin/sendmail。我不想(在apparmor中)允许apache/php执行shell。我只希望php直接运行sendmail包装,而不涉及shell。可能吗 我的另一个想法是编写一个“类似shell”的二进制文件,它将检

我在linux上使用PHP作为apache模块。我还使用apparmor保护系统。当我想用simply mail()函数为自己发送邮件时,我注意到php想要执行shell(/bin/bash,因为/bin/sh是一个符号链接),即使我在php.ini中设置了/usr/sbin/sendmail。我不想(在apparmor中)允许apache/php执行shell。我只希望php直接运行sendmail包装,而不涉及shell。可能吗

我的另一个想法是编写一个“类似shell”的二进制文件,它将检查要执行的命令。在我看来,如果不能让PHP跳过使用shell,那么使用一个包装器是一个好主意,它甚至可以用来记录尝试、执行不需要的东西等等(我也会用它来记录UID,因为我有不同unix UID运行方式的vHost,这就是计划)。然而,在这种情况下,我只知道一件事:如何设置PHP以使用给定的可执行文件作为shell?一般来说,全局范围内,也适用于system()等函数。我尝试在apache中使用SetEnv来设置SHELL变量,但它不起作用,PHP仍然尝试使用默认的/bin/sh

解释:我必须(不是我的节点等)在Linux上使用PHP mail()函数,如果这意味着PHP脚本上的任何代码更改,则不能使用其他解决方案来发送邮件,例如远程SMTP服务器


谢谢

您可以运行本地smtp服务器(仅绑定到127.0.0.1!)并让php将您的邮件发送到那里。这样,您就不必调用任何shell,只需连接到本地服务器即可


是的,但我需要使用未经修改(由其他人编写)的PHP代码,该代码无法修改(作者的策略),它只使用mail()函数。我是否可以修改PHP.ini中的PHP设置等,使PHP在Linux上也使用SMTP服务器来实现mail()功能?另外,请注意,这对我来说是一个有趣的问题,即使在理论上(不仅仅是因为实际问题),我如何为PHP设置一个shell,以便在每次需要执行shell时使用。我想它在其他几个方面也很有趣,不仅仅是我的邮件问题……好的,谢谢你的回答,这很有帮助。但是,我将这个问题作为一个通用的(与mail()无关)问题重新提出(作为一个不同的问题,而不是这里),因为我需要设置自定义shell,而不仅仅是针对mail()。。。再次感谢你的帮助!