当前位置: 首页 > 后端技术 > PHP

PHP1_PHP语言介绍(Zend、扩展、查看配置文件路径等)

时间:2023-03-30 00:41:51 PHP

什么是Zend?Zend是创建PHP的公司。Zend引擎是一个开源的脚本引擎(一个虚拟机),被誉为PHP语言的重要核心。用C语言编写,用于执行PHP脚本;Zend是一个PHP解释器,PHP语法将由它来解析。同时Zend支持动态扩展,让PHP支持更多的功能;PHP能做什么?PHP作为一门语言可以开发服务器脚本(90%,用来开发Web应用)命令行脚本(比如在shell中执行的nslookup命令行程序,PHP也可以开发,经常被运维人员使用,用的多苗条。一般使用Python)图形界面(不是PHP的主攻方向,但可以开发,需要加载扩展)。Zend引擎支持动态扩展。只要有相应的扩展,即使是Win32的窗口程序也可以在PHP安装目录的ext目录下进行开发扩展。有各种扩展dll(.so)。在PHP配置文件中,可以配置是否启用某个扩展。启用扩展后,PHP就有能力做到这一点;例如:在PHP配置中启用Mysql扩展,则PHP具有连接MYSQL的能力;其实扩展的本质就是一些C函数库(dll/so)。调用库中的函数,完成一些PHP本身做不到的功能;由于Zend引擎是用C语言编写的,所以要求扩展库可以被C动态调用。接下来,我们也简单了解下如何开发自己的扩展库~因此PHP理论上可以实现任何功能,只要有对应的扩展库~查看当前php加载的扩展都存放在ext目录下,需要在配置文件php.ini中启用后才能加载;如何查看当前的PHP环境,加载了哪些扩展?可以使用以下方法01.查看PHP配置文件,查看启用了哪些扩展(不方便)02.通过调用php命令获取扩展信息在PHP安装目录下,提供了一些程序,这些程序是用来运行的PHP脚本(如Java中的java.exe)php-m列出打开的扩展(最清晰)php-i和phpinfo()一样的作用,打印出PHP信息,从这里也可以看到扩展,但是它凌乱;php-i>D:\out.txt打印phpinfo()PHP信息,在D:out.txt中输出,内容重定向03,通过php代码查看扩展;,比较凌乱;04.通过PHP代码获取$resultArr=get_loaded_extensions()函数,返回扩展名数组;05、通过PHP代码extension_loaded(""),可以传入扩展名,检测扩展是否加载;06.通过PHP代码function_exists("")可以传入函数名来检测扩展中的函数是否存在,从而判断扩展是否加载;查看扩展信息(版本等)php--riextension指定一个扩展,输出扩展的信息,可以看到版本,也可以看到是否加载;例如:php--rimemcached结果如下:php--rimemcachedmemcachedmemcachedsupport=>enabledVersion=>2.2.0自研扩展1.使用ext-skelC语言开发作者很不友好,ZendAPI源码中提供的极难使用,API复杂凌乱,各种宏充斥。ZendAPI的坑很多,普通开发者很容易踩坑。出现各种莫名其妙的coredump问题。ZendAPI几乎没有文档,开发者要想真正掌握这项技能,需要付出大量的学习时间。以上是swoole扩展开发者的心声。可见,使用这种方式开发扩展,对于我们初学者来说是一种严重的打击。幸运的是,一些大神已经为我们开发php扩展准备了其他的方法。你不需要学习zendapi,也不需要精通c语言,照样可以开发php扩展,而且生成的扩展运行速度不会和c语言开发相差太多。2、使用zephir类PHP语言开发Zephir提供了一种类似于PHP的高级语言语法来自动生成扩展的C语言代码,使得编写PHP扩展变得非常简单。但是这种开发方式带来了一个问题,就是因为他没有使用c/c++语言开发,所以没有办法直接使用现有的各种c/c++开发库来实现强大的功能。所以感觉有点鸡肋。3、使用PHP-XC++语言开发php-x是知名swoole扩展开发者根据多年开发经验提炼出来的一套基于C++的扩展开发框架。从文档来看,这是一个比较好用的开发框架,数据类型齐全,和phpcpp的开发风格很像,不过我还没有尝试过。根据php-x官方文档,开发的扩展只支持PHP7及以上版本,有点遗憾。4、使用phpcppC++语言开发PHPCPP是我推荐的PHP扩展开发框架,简洁易懂,功能强大,开发效率高,代码易于维护,执行速度快。PHPCPP是一个免费的php开发扩展库,主要针对C++语言,可以扩展和构建类集合。它使用简单的计算机语言使扩展更加有趣和有用。方便开发者维护编写,简单易用。易于理解和维护,代码美观。用C++编写的算法看起来与用PHP编写的算法几乎相同。如果您知道如何使用PHP进行编程,那么您可以轻松地学习如何使用C++进行同样的操作。优势一:无需Zend引擎知识。ZendEngine的内部结构过于复杂,ZendEngine的代码很乱,而且大多没有文档记录。但是PHP-CPP库已经将所有这些复杂的结构封装在非常易于使用的C++类和对象中。您可以用C++编写速度惊人的算法,而无需直接调用ZendEngine,甚至无需查看ZendEngine源代码。使用PHP-CPP,您可以编写本机代码而无需处理PHP的内部结构。优势二:支持所有重要的PHP函数使用PHP-CPP,您可以像使用普通PHP脚本一样轻松处理变量、数组、函数、对象、类、接口、异常和命名空间。除此之外,您还可以使用C++的所有功能,包括线程、lambda和异步编程。优势三:支持PHP5.X和PHP7的扩展开发PHP-CPP有两套扩展开发框架,分别支持PHP5.X和PHP7。虽然是两个框架代码,但是接口是一样的。所以如果你想开发兼容多个版本的php扩展,做兼容不会花费你太多额外的时间。安装扩展程序相对简单。extension其实就是一个函数库(动态链接库),放在ext目录下,在配置中开启加载;理解和开发)PHP安装目录下有两种PHP的执行方式,分别是php.exe和php-cgi.exe,都是执行PHP的解析器;php.exe常被用作CLI命令行程序Parser的PHP;php-cgi.exe用作Apache/Nginx的FastCGI解析器;所以PHP有以下两种运行模式;CLI命令行执行phpD:\study.php参数介绍:php-aphp使用shell交互方式运行PHP代码php-c使用指定路径的配置文件(或配置文件目录)运行PHP脚本phpindex_cli.php-cD:\\apache\\apache2.2.22\\bin\\php.iniphp-iphpinfo信息输出php-m显示加载的模块php-r运行一段PHP代码,而不是整个脚本文件php-v版本号php-h帮助信息php--ini显示配置信息,配置文件使用路径php--ri显示扩展配置php-S执行时,顺便打开一个microWebServer,方便调试。这很有用。当你需要临时调整一个PHP时,你不需要安装像Apache/nginx这样庞大的环境。php命令运行脚本获取命令行参数1.命令行自定义变量[argv|argv|argc]在命令行中输入程序参数来改变其运行方式是很常见的。您也可以为CLI程序执行此操作。PHPCLI带有两个为此目的而设计的特殊变量:  一个是$argv变量,它保存通过命令行作为单个数组元素传递给PHP脚本的参数;  另一个是$argc变量,用来保存$argv数组的元素个数。!!!请注意,$argv的第一个参数始终是脚本本身的名称。php-f.\\cli.php姓名年龄性别##cli.php代码string(9)".\cli.php"[1]=>string(4)"name"[2]=>string(3)"age"[3]=>string(3)"性别"}2。命令行自定义变量[Consolegetopt()]注:该方法需要打开[register\_argc\_argv]php.exe\\tools\\index.php-f"valueforf"-v-a--requiredvalue--optional="optionalvalue"intheconfiguration--optionwill##codefortools\index.phpresult:array(6){["f"]=>string(11)"valueforf"["v"]=>bool(false)["a"]=>bool(false)["required"]=>string(5)"value"["optional"]=>string(14)"optionalvalue"["option"]=>bool(false)}CLI命令行脚本的输入输出在PHPCLI中,可以使用3个系统常量,分别是STDIN、STDOUT和STDERR(1)STDINSTDIN称为标准输入或标准输入,标准输入可以从终端获取任何数据。(2)STDOUTSTDOUT称为标准输出或标准输出,标准输出可以直接输出到屏幕(或其他程序),使用STDIN),如果在PHPCLI模式下使用print或echo语句,则数据会发送到STDOUT。(3)STDERRSTDERR代表标准错误,默认直接发送到用户终端。当使用当其他应用程序不读取数据时,将生成来自“stdin.stderr”的STDIN文件句柄。FastCGI(CGI)在执行FastCgi时使用php-cgi解析PHP,具体请直接php-cgi-h查看使用方法~WebFastCGI与CLI运行时不一致问题虽然php.exe和php-cgi的应用场景不同,它们背后都有相同的Zend引擎。但是有时候,你会发现WebPHP的扩展和CLI的扩展不一致,可能会出现这种情况,我们来分析一下原因;比如现在有一个web项目,你想查看当前加载了哪些扩展,你在web中使用phpinfo(),然后php-m也输出了当前加载的扩展列表,但是可能不一致;导致这样的原因是php和php-cgi可能会分别加载不同的php.ini;如果希望CLI和Web的运行配置相同,可以使用命令让CLI使用t网络配置;#让index_cli.php命令行脚本使用和Web一样的配置:phpindex_cli.php-cD:\\apache\\apache2.2.22\\bin\\php.ini查看当前配置文件路径php-iandphpinfo()有两个地方显示和当前Configuration相关的信息;在CLI模式下,您可以使用php--ini获取当前配置文件位置

最新推荐
猜你喜欢