php 调用方法-在 PHP 命令行、cmd 等中调用外部命令的方式

2023-08-21 0 7,112 百度已收录

如何在 PHP 中调用外部命令

在 PHP 中调用外部命令可以通过以下三种方式实现:

方法一:使用PHP提供的专用函数(四):

PHP 提供了 4 个用于执行外部命令的专用函数:exec()、system()、passthru()、shell_exec()。

1)exec()

原型:字符串

exec (字符串 KaTeX 解析错误:预期的“EOF”,在位置 18 处得到“&”:...mmand [,array &output [php 调用方法, int &$return_var ]] )

注意:exec 在系统外执行命令时不输出结果,但返回结果的最后一行。如果要获取结果,可以使用第二个参数并将其输出到指定字段。此字段(一条记录)表示输出的一行。也就是说,如果输出结果有 20 行,则此字段中有 20 条记录,因此如果需要重复输出调用不同系统外部命令的结果,最好在输出每个系统外部命令的结果时清除此字段 unset($output),以防止混淆。第三个参数用于获取命令执行的状态码,如果执行成功,通常返回 0。

2)系统()

原型:字符串

系统(字符串 KaTeX 解析错误:预期的“EOF”,在位置 16 处得到“&”:命令 [、int &return_var ] )

注意:system和exec的区别在于,当系统在系统外执行命令时,它直接将结果输出给浏览器,如果命令执行成功则返回true,否则返回false。第二个参数与第三个参数 exec 的含义相同。

3)直通()

原型:空直通(字符串 KaTeX 解析错误:预期的“EOF”,在位置 16 处得到“&”:命令 [、int &return_var ] )

注意:直通和系统的区别,直通直接输出结果给浏览器,不返回任何值,可以输出二进制,比如图像数据。第二个参数是可选的,即状态代码。

4)shell_exec()

原型:字符串shell_exec(字符串$cmd)。

注意:直接执行命令$cmd

需要考虑两个问题:安全性和超时

1) 安全

由于PHP基本上用于Web程序开发,因此安全性已成为考虑的一个重要方面。因此,PHP设计者为PHP增加了一个门:安全模式。如果在安全模式下运行php 调用方法,PHP 脚本将受到以下四个限制:

执行外部命令

打开文件时有一些限制

连接到 MySQL 数据库

PHP7 和 HHVM说

到PHP,肯定有人会说它是世界上最好的编程语言。仅就受欢迎程度而言,目前全球超过81.7%的服务器前端使用PHP语言,该语言驱动全球超过2亿个网站。PHP7 的正式发布于上月初发布,迎来了自 2004 年以来最大的版本更新。现在 PHP 7.0 即将发布。对于普通的PHP

网站来说,主要是IO密集型的,瓶颈在MySQL数据之上,这并不能体现PHP性能的劣势。然而,就密集估计而言,它比静态编译的语言(如 C、C++ 和 Java)差几十倍甚至数百倍。如果在PHP开发中使用更复杂的框架,如symfony,程序的性能将得到显着提高。事实上php性能,PHP 最初并不是为解决估计密集型应用场景而设计的。我们可以简单理解一下,PHP 为了提高开发效率而牺牲执行效率。

不过PHP比较流行,比如新浪微博、Facebook等小网站的大部分程序都是用PHP编写的,也就是说,在这些大规模的应用下,PHP性能较低。Facebook早期的大部分代码都是使用PHP开发的,但随着业务的快速发展,PHP执行效率成为一个越来越重要的问题。为了优化执行效率,Facebook在2008年开始使用HipHop,这是一个PHP执行引擎,最初旨在将Fackbook的大量PHP代码转换为C++,以提高性能和节省资源。使用HipHop的PHP代码提高了数倍的性能。后来,Facebook开源了HipHop平台,并逐渐发展成为今天的HHVM。HHVM取代了PHP自己的引擎Zend Engine。据说性能提高了 70%。当然,PHP官方也知道PHP最大的弱点,所以他们启动了PHP7项目,主要是构建Zend Engine引擎。PHP

7 最明显的变化是巨大的性能提升,接近 Facebook 开发的 PHP 执行引擎 HHVM。在WordPress基准测试性能测试中,速度比5.6版本快2~3倍,大大降低了视频内存占用。PHP 7 也有一些语言变化,比如添加返回类型声明和添加一些新的保留关键字。在安全性方面,删除了PHP安全模式,添加了魔法吨等。不仅如此,新版本还支持64位,并包含最新版本的Zend引擎。事实上,PHP7 在真实场景中的性能确实可以与 HHVM 相媲美,在某些场景甚至超过了 HHVM。但是,HHVM 操作复杂且是多线程的,这意味着如果线程导致崩溃,整个服务将挂起,并且不会自动重新启动。此外,它使用JIT,这意味着它重启后必须预热,如果不预热,性能会更差。而且多线程模型很难调试,非常适合追求稳定性的Web服务。

百胜安装 PHP7

要使用最新版本的PHP,您需要使用REMI存储库,这是一个包含最新PHP和MySQL软件包的Linux源代码,由Remi维护。有了这个源代码后,我使用 YUM 安装或更新了较新版本的 PHP 和 MySQL。

安装最新的 Remi 源以手动安装文件

# CentOS 6 / RHEL 6
yum install http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
# CentOS 7 / RHEL 7
yum install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

安装

PHP 相关组件php性能,下面提供的是在生产环境中使用的标准安装。

$ yum --enablerepo=remi,remi-php70 install
php 
php-cgi 
php-cli 
php-fpm 
php-common 
php-devel 
php-mysqlnd 
php-mysql 
php-sqlite3 
php-mbstring 
php-msgpack 
php-mcrypt 
php-bcmath 
php-gd 
php-xml 
php-ldap 
php-xmlrpc 
php-opcache 
php-curl 
php-json 
php-odbc 
php-pdo 
php-bz2 
php-xml 
php-ftp 
php-imap 
php-snmp 
php-redis 
php-memcached

检查 PHP 版本

$ php -v
PHP 7.0.9 (cli) (built: Jul 20 2016 18:08:08) ( NTS )

启动 PHP-FPM

$ service php-fpm start

此时,PHP 7.0 已安装。如果需要使用 PHP 扩展,如 redis、memcached 等,只需要使用 YUM 即可安装,如下所示:

$ yum --enablerepo=remi,remi-php70 install php-redis php-memcached

如果在 REMI 或 EPEL 源中找不到所需的扩展,则需要自动编译并安装它,这也非常简单。

还可以使用 php -m 命令查看 PHP 模块信息。

$ php -m | grep redis
redis

安装一组LNMP

php 调用方法-在 PHP 命令行、cmd 等中调用外部命令的方式

参考:LNMP安装包部署实践或参考PHP 7.0版本的LNMPZabbix 3.0安装和使用解释

PHP7 性能测试

环境:4核CPU,4G内存,操作系统Centos 6.5。

首先,一点GCC编译器建议,

根据鸟哥的建议,使用更新的编译器,GCC 4.8 或更高版本,建议 GCC 4.8 或更高版本,PHP 会开放全局注册进行 opline 和 execute_data 支持,这将带来 5% 左右的性能提升。

编写一个程序(在线提供的简单测试):

php 调用方法-在 PHP 命令行、cmd 等中调用外部命令的方式

在第一段中,生成一个包含 600,000 个元素的字段,通过查找键来确定键是否存在。

< ?php
$a = array();
for($i=0;$i<600000;$i++){
  $a[$i] = $i;
}
foreach($a as $i)
{
 array_key_exists($i, $a);
}

第一个是PHP版本5.3.17。

[root@localhost test]# time php search_by_key.php 
real 0m0.389s
user 0m0.337s
sys  0m0.051s
[root@localhost test]# time php search_by_key.php 
real 0m0.378s
user 0m0.308s
sys  0m0.062s
[root@localhost test]# time php search_by_key.php 
real 0m0.378s
user 0m0.317s
sys  0m0.061s

接下来是 PHP 版本 7.0。

[root@localhost php7]# time php7 search_by_key.php
real 0m0.082s
user 0m0.066s
sys  0m0.014s
[root@localhost php7]# time php7 search_by_key.php
real 0m0.080s
user 0m0.058s
sys  0m0.021s
[root@localhost php7]# time php7 search_by_key.php
real 0m0.080s
user 0m0.053s
sys  0m0.026s

响应时间是 PHP7 下原始操作的 1/4。

里面还是这个方法,但是因为速率慢,所以会做一个包含6万个元素的字段来查找值。

< ?php
$a = array();
for($i=0;$i<60000;$i++){
  $a[$i] = $i;
}
foreach($a as $i)
{
 array_key_exists($i, $a);
}

PHP 版本 5.3.17

[root@localhost test]# time php search_by_val.php 
real 0m24.296s
user 0m24.184s
sys  0m0.025s
[root@localhost test]# time php search_by_val.php 
real 0m25.523s
user 0m25.317s
sys  0m0.026s
[root@localhost test]# time php search_by_val.php 
real 0m26.026s
user 0m25.478s
sys  0m0.092s

等待时间总是感觉很长,三次测试,花了75秒以上。接下来,PHP 7 出来了。

[root@localhost php7]# time php7 search_by_val.php
real 0m3.362s
user 0m3.323s
sys  0m0.007s
[root@localhost php7]# time php7 search_by_val.php
real 0m3.266s
user 0m3.251s
sys  0m0.004s
[root@localhost php7]# time php7 search_by_val.php
real 0m3.290s
user 0m3.275s
sys  0m0.006s

你有吗!速度提高了近 7 倍。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 php php 调用方法-在 PHP 命令行、cmd 等中调用外部命令的方式 https://www.wkzy.net/game/134273.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务