php 5.4 for linux php apache
大家好,如果您还对php 5.4 for linux不太了解,没有关系,今天就由本站为大家分享php 5.4 for linux的知识,包括php apache的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!
阿里云上的centos 7.2怎么yum安装php 5.6
因之前通过网易的 centos镜像,将阿里云的 centos升级到最新版了,乘自己的项目尚未开始正式开发,遂将所有的相应环境都升级到最高。
查看 centos版本:
[root@iZ23d~]# cat/etc/centos-release
CentOS Linux release 7.2.1511(Core)
1、删除之前的 php版本:
[root@iZ23d~]# yum remove php* php-common
Loaded plugins: langpacks
Repository base is listed more than once in the configuration
Repository updates is listed more than once in the configuration
Repository extras is listed more than once in the configuration
Repository centosplus is listed more than once in the configuration
No Match for argument: php-5.4.16
No Match for argument: php-5.4.16.tar.gz
No Match for argument: php-7.0.1RC1
No Match for argument: php-7.0.1RC1.tar.gz
No Match for argument: phpMyAdmin-4.4.0.tar.gz
No Match for argument: php-common
No Packages marked for removal
2、rpm安装 Php7相应的 yum源:
[root@iZ23d~]# rpm-Uvh
Retrieving
warning:/var/tmp/rpm-tmp.LhJKKR: Header V4 RSA/SHA1 Signature, key ID 62e74ca5: NOKEY
Preparing...################################# [100%]
package webtatic-release-7-3.noarch is already installed
3、直接yum安装php7:
[root@iZ23d~]# yum install php70w
Loaded plugins: langpacks
Repository base is listed more than once in the configuration
Repository updates is listed more than once in the configuration
Repository extras is listed more than once in the configuration
Repository centosplus is listed more than once in the configuration
Resolving Dependencies
--> Running transaction check
。。。【省略】
Warning: RPMDB altered outside of yum.
Installing: php70w-common-7.0.0-1.w7.x86_64 1/3
Installing: php70w-cli-7.0.0-1.w7.x86_64 2/3
Installing: php70w-7.0.0-1.w7.x86_64 3/3
Verifying: php70w-7.0.0-1.w7.x86_64 1/3
Verifying: php70w-common-7.0.0-1.w7.x86_64 2/3
Verifying: php70w-cli-7.0.0-1.w7.x86_64 3/3
Installed:
php70w.x86_64 0:7.0.0-1.w7
Dependency Installed:
php70w-cli.x86_64 0:7.0.0-1.w7 php70w-common.x86_64 0:7.0.0-1.w7
Complete!
4、检查 php版本:
[root@iZ23d~]# php-v
PHP 7.0.0(cli)(built: Dec 2 2015 20:42:32)( NTS)
Copyright(c) 1997-2015 The PHP Group
Zend Engine v3.0.0, Copyright(c) 1998-2015 Zend Technologies
[root@iZ23d2e6hoqZ~]#
以上显示安装成功!
5、重启 Apache,查看 phpinfo:
[root@iZ23d~]# systemctl restart httpd.service
检查phpinfo:
PHP Version 7.0.0
SystemLinux iZ23d 3.10.0-229.11.1.el7.x86_64#1 SMP Thu Aug 6 01:06:18 UTC 2015 x86_64
Build DateDec 2 2015 20:43:38
Server APIApache 2.0 Handler
Virtual Directory Supportdisabled
Configuration File(php.ini) Path/etc
Loaded Configuration File/etc/php.ini
Scan this dir for additional.ini files/etc/php.d
Additional.ini files parsed/etc/php.d/bz2.ini,/etc/php.d/calendar.ini,/etc/php.d/ctype.ini,/etc/php.d/curl.ini,/etc/php.d/exif.ini,/etc/php.d/fileinfo.ini,/etc/php.d/ftp.ini,/etc/php.d/gettext.ini,/etc/php.d/gmp.ini,/etc/php.d/iconv.ini,/etc/php.d/json.ini,/etc/php.d/phar.ini,/etc/php.d/shmop.ini,/etc/php.d/simplexml.ini,/etc/php.d/sockets.ini,/etc/php.d/tokenizer.ini,/etc/php.d/xml.ini,/etc/php.d/zip.ini
PHP API20151012
PHP Extension20151012
Zend Extension320151012
Zend Extension BuildAPI320151012,NTS
PHP Extension BuildAPI20151012,NTS
Debug Buildno
Thread Safetydisabled
Zend Signal Handlingdisabled
Zend Memory Managerenabled
Zend Multibyte Supportdisabled
IPv6 Supportenabled
DTrace Supportenabled
Registered PHP Streamshttps, ftps, compress.zlib, php, file, glob, data, http, ftp, compress.bzip2, phar, zip
Registered Stream Socket Transportstcp, udp, unix, udg, ssl, sslv3, sslv2, tls, tlsv1.0, tlsv1.1, tlsv1.2
Registered Stream Filterszlib.*, string.rot13, string.toupper, string.tolower, string.strip_tags, convert.*, consumed, dechunk, bzip2.*, convert.iconv.*
This program makes use of the Zend Scripting Language Engine:
Zend Engine v3.0.0, Copyright(c) 1998-2015 Zend Technologies
Configuration
apache2handler
Apache VersionApache/2.4.6(CentOS)
Apache API Version20120211
Server Administratorxxxxxx@xxxxxx.com
Hostname:Portxxxx.xxxxx.xxx:0
User/Groupapache(48)/48
Max RequestsPer Child: 0- Keep Alive: on- Max Per Connection: 100
TimeoutsConnection: 60- Keep-Alive: 15
Virtual ServerYes
Server Root/etc/httpd
Loaded Modulescore mod_so http_core mod_access_compat mod_actions mod_alias mod_allowmethods mod_auth_basic mod_auth_digest mod_authn_anon mod_authn_core mod_authn_dbd mod_authn_dbm mod_authn_file mod_authn_socache mod_authz_core mod_authz_dbd mod_authz_dbm mod_authz_groupfile mod_authz_host mod_authz_owner mod_authz_user mod_autoindex mod_cache mod_cache_disk mod_data mod_dbd mod_deflate mod_dir mod_dumpio mod_echo mod_env mod_expires mod_ext_filter mod_filter mod_headers mod_include mod_info mod_log_config mod_logio mod_mime_magic mod_mime mod_negotiation mod_remoteip mod_reqtimeout mod_rewrite mod_setenvif mod_slotmem_plain mod_slotmem_shm mod_socache_dbm mod_socache_memcache mod_socache_shmcb mod_status mod_substitute mod_suexec mod_unique_id mod_unixd mod_userdir mod_version mod_vhost_alias mod_dav mod_dav_fs mod_dav_lock mod_lua prefork mod_proxy mod_lbmethod_bybusyness mod_lbmethod_byrequests mod_lbmethod_bytraffic mod_lbmethod_heartbeat mod_proxy_ajp mod_proxy_balancer mod_proxy_connect mod_proxy_express mod_proxy_fcgi mod_proxy_fdpass mod_proxy_ftp mod_proxy_http mod_proxy_scgi mod_proxy_wstunnel mod_ssl mod_systemd mod_cgi mod_perl mod_php7
以上显示 php7安装成功!
linux下phpstudy怎么安装php环境变量
linux下phpstudy环境的安装
phpStudy Linux版&Win版同步上线支持Apache/Nginx/Tengine/Lighttpd/IIS7/8/6
phpStudy for Linux支持Apache/Nginx/Tengine/Lighttpd,
支持php5.2/5.3/5.4/5.5切换
已经在centos-6.5,debian-7.4.,ubuntu-13.10测试成功。
下载版:http//lamp.phpstudy.net/phpstudy.bin
完整版:http//lamp.phpstudy.net/phpstudy-all.bin
安装:
wget-c http//lamp.phpstudy.net/phpstudy.bin
chmod+x phpstudy.bin#权限设置
./phpstudy.bin#运行安装
用时十到几十分钟不等,安装时间取决于电脑的下载速度和配置。
也可以事先下载好完整,安装时无需下载。
安装完成
如何切换php版:
假如你先安装的apache+php5.3
想切换成nginx+php5.4
你就再走一次./phpstudy.bin
但是你会发现有一行是否安装mysql提示选不安装
这样只需要编译nginx+php5.4
从而节省时间,这样只需要几分钟即可。
项目地址:
使用说明:
服务进程管理:phpstudy(start|stop|restart|uninstall)
站点主机管理:phpstudy(add|del|list)
ftpd用户管理:phpstudy ftp(add|del|list)
=phpstudy WIN版下载==================
『软件简介』
该程序包集成最新的Apache+Nginx+LightTPD+PHP+MySQL+phpMyAdmin+Zend Optimizer+Zend Loader,一次性安装,无须配置即可使用,是非常方便、好用的PHP调试环境。该程序绿色小巧简易迷你仅有35M,有专门的控制面板。总之学习PHP只需一个包。
对学习PHP的新手来说,WINDOWS下环境配置是一件很困难的事;对老手来说也是一件烦琐的事。因此无论你是新手还是老手,该程序包都是一个不错的选择。
1、全面适合 Win2000/XP/2003/win7/win8/win2008操作系统,支持Apache、IIS、Nginx和LightTPD。
2、该程序包集成以下软件,括号内为phpstudy下对应的目录。
php 5.6a3(php56n)
php 5.5.10(php55)
php 5.5.10-nts(php55n)
php 5.4.26(php54)
php 5.4.26-nts(php54n)
php 5.3.28(php53)
php 5.3.28-nts(php53n)
php 5.2.17(php52)
Apache 2.4.7(Apache)
Nginx 1.5.11(nginx)
LightTPD 1.4.32(Lighttpd)
MySQL 5.5.36(MySQL)
MySQL-Front 5.3(SQL-Front)
phpMyAdmin 3.5.8.2(phpMyAdmin)
pear 1.9.4(pear)
OpenSSL 1.0.1e&0.9.8y
ZendOptimizer 3.3.3(php5.2有)
Zend Loader 5.5.0(php5.3有)
Zend Loader 6.0.0(php5.4有)
wincache 1.3.5(fastcgi有)
php_opcache 7.0.3(ZendOpcache扩展)
xdebug 2.2.3.1
Zend Debugger 6.2(php5.3/4 fastcgi有)
xcache 3.1.0
eAccelerator 1.0&0.9.6
php_sqlsrv(MSSQL扩展)
php_pdo_sqlsrv(PDO-MSSQL扩展)
php_mongo 1.4.5(MongoDB扩展)
php_dbase 5.1.0(dbase扩展)
php_dbx 1.1.2(dbx扩展)
php_ibm_db2 1.9.5(ibm_db2扩展)
php_apc 3.1.13(php_apc扩展)
php_memcache 3.0.8
phpStudy Ftp server(FTPServ)
SendMail 3.2(sendmail)
VC++ 2008运行库
3、MySQL数据库默认用户名:root,密码root,安装后请重新设置密码。
4、本程序纯绿色,支持22种组合一键切换,支持系统服务和非服务两种启动方式,自由切换。改变安装路径或拷贝到别的电脑上也可正常运行;即便是运行完再更改路径也能运行,真正做到无须配置。重写控制面板更加有效直观地进行控制程序的启停。
5、自带FTP服务器,支持多用户,无需再安装FTP服务器。自带网站挂马监视器,随时记录文件的修改情况,让挂马文件无处可逃。
6、本程序完美支持II7,IIS8和IIS6。应网友的要求制作Nginx版和Lighttpd版。Nginx版为phpfind,Lighttpd版为phpLight。
推荐:学习JSP用JspStudy。
『软件简介』
JspStudy集成JDK+tomcat+Apache+mysql,JSP环境配置一键启动。无需修改任何配置即可迅速搭建支持JSP的服务器运行环境。
纯绿色解压即可,支持系统服务和非服务两种启动方式,自由切换。控制面板更加有效直观地进行控制程序的启停。
JspStudy将复杂的JSP环境配置简单化。
『特别注意』
1.为了减少出错安装路径不得有汉字,如有防火墙开启,会提示是否信任httpd、mysqld运行,请选择全部允许。
2.此为apache+php方案,需要Nginx+php方案的请到www.phpStudy.net下载phpfind,Lighttpd+PHP方案下载phpLight。
3.重装系统后或相关服务丢失时,只需要点一下『运行模式-应用』即可。
4.可通过菜单『卸载相关服务』进行卸载相关服务。
5.在『启动』、『停止』、『重启』三个启停按钮上右键可以有选择地进行启停,左键将控制全部的启停。
6.菜单『phpStudy设置』可以进行php,apche,mysql的相关设置。菜单『站点域名设置』可以进行站点及域名的添加。
7.本程序分为安装版和非安装版,无论是安装还是免安装,最后的效果完全一致。
8.端口问题无法启动时,请使用菜单『环境端口检测』进行端口检测,尝试启动。
26种组合一键切换apache+php
php扩展管理超级方便
nginx+php
IIS7/8/6+php
mysql备份还原导入导出
站点域名设置
端口检测
博客不再更新,请到官方网站下载:
下载地址解压版:
下载地址安装版:
其他版本:
软件简单说明各版本的区别大小下载
phpStudy26种组合,超全大合集Apache+Nginx+LightTPD+IIS
php5.2 php5.3 php5.4 php5.5 php5.6
MySQL phpMyAdmin MySQL-Front
26种组合自由切换,是下面5个版本的合集
同时支持apache/nginx/Lighttpd和IIS7/8/636M解压版
安装版
phpStudy
Lite
新手用,经典wamp组合Apache+php5.3+php5.4+MySQL(wamp集成包)
没有上面合集复杂的多版本设置,简单适合新手。16M解压版
phpStudy
for IIS
IIS服务器专用IIS+php5.2+php5.3+php 5.4+MySQL
php一键安装包 for IIS7/8/6(IIS服务器专用)21M解压版
phpStudy
for Linux
Linux服务器专用(lamp)Apache+Nginx+LightTPD+MySQL
php5.2+php5.3+php5.4+php5.5一键安装包
支持centos,ubuntu,debian等Linux系统,12种组合80M安装版
phpfindnginx+php组合(wnmp)Nginx+php5.3+php5.4+MySQL(wnmp集成包)
nginx+php组合,适合喜欢用nginx的朋友16M解压版
phpLightlighttpd+php组合(wlmp)Lighttpd+php5.3+php5.5+MySQL(wlmp集成包)17M解压版
phpStudy
(php5.2)
apache+php5.2珍藏版Apache2.2+php5.2.17+MySQL5.1
php5.2经典组合值得收藏,仅有11M,无需运行库11M解压版
JspStudyJSP环境一键安装包JDK+tomcat+Apache+mysql+php
纯绿色解压即可,不添加环境变量,不修改注册表52M解压版
下载地址:
php5.3+php5.4合集下载: http//www.phpstudy.net/phpstudy/phpStudy.zip
如何在 Oracle Linux 上使用 PHP DTrace
DTrace是一个受欢迎的、“总是可用”的跟踪实用程序,用于识别开发和生产系统中的性能和行为问题。适用于 Oracle Linux的标准“UEK3”内核包括了 DTrace支持。通过跟踪 PHP核心和 PHP OCI8扩展中的用户探测器,我们可以有效地识别 PHP脚本问题。DTrace让您可以跟踪用户应用程序与操作系统之间的交互。
在 Oracle Linux上,DTrace实用程序需要一个 Oracle Unbreakable Linux Network(ULN)订阅。
安装 Oracle Linux和 Oracle Unbreakable Enterprise Kernel版本 3
首先,通过 Oracle E-Delivery安装 Oracle Linux 6.4。
安装 Oracle Linux 6.4之后,确保在 ULN中启用了“Unbreakable Enterprise Kernel Release 3 for Oracle Linux 6(x86_64)- Latest”频道。安装 UEK3内核:
# yum install kernel-uek
在 ULN中启用“Oracle Linux 6 Dtrace Userspace Tools(x86_64)- Latest”频道,安装 DTrace实用程序:
# yum install dtrace-utils
重新引导到新的 UEK3 3.8.13内核。
安装 PHP
需要使用--enable-dtrace参数构建 PHP。您可以安装一些启用了 DTrace的预先构建的评估版 RPM,请参见“使用 Oracle Linux“playground”预构建软件包的 DTrace PHP”。
也可以按照如下所述重新构建 PHP:
从 php.net下载 PHP 5.4.20或 PHP 5.5.4或更高版本,然后进行解压缩:
$ tar-xJf php-5.4.20.tar.bz2
$ cd php-5.4.20
配置 PHP:
$./configure\
--prefix=$HOME/p54\
--enable-dtrace\
--disable-all--disable-cgi\
--with-pear--enable-xml--enable-libxml--with-zlib
这将构建一个启用了 DTrace的最小的命令行 PHP。所有不需要的扩展均被禁用。您可根据需要包含其他扩展。
--prefix选项表示安装到一个本地目录,方便您查看安装的文件。用完快照之后,清理该目录很容易。
pear、xml和 zlib选项允许使用 pecl命令。
生成 PHP二进制文件并进行安装:
$ make
$ make install
将 php.ini-development复制到$HOME/p54/lib/php.ini,编辑该文件来设置时区,例如:
date.timezone= America/Los_Angeles
安装适用于 Oracle Database的 PHP OCI8
评估版 PHP RPM包括可以连接到 Oracle Database的 OCI8扩展;请参见前面提到的博文。
不过,如果您自己编译 PHP,需要手动将 PHP OCI8作为一个“共享的”扩展添加:
在 ULN上启用“Oracle Software for Oracle Linux 6(x86_64)”频道。
以 root用户身份安装 Oracle Instant Client:
# yum install oracle-instantclient12.1-basic oracle-instantclient12.1-devel
作为普通用户,设置 PHP的 PATH:
$ export PATH=$HOME/p54/bin:$PATH
如果需要访问 ,请设置一个 PEAR代理:
$ pear config-set http_proxy
设置用来启用 DTrace的环境变量 PHP_DTRACE,然后安装 PHP OCI8:
$ PHP_DTRACE=yes pecl install oci8-2.0.2
本文后面将要用到的 DTrace探测器定义基于 PHP OCI8 2.0.2,因此需要安装明确的版本。如果您要安装更高的版本,请查看探测器及其参数,了解最新版本中的小改进。
当提示 ORACLE_HOME目录时,无需输入文本,直接按 Return。安装将自动检测 Oracle Instant Client RPM。配置将继续,输出将包含类似下面的内容:
[... ]
checking for Oracle Database OCI8 support... yes, shared
checking PHP version... 5.4.20, ok
checking OCI8 DTrace support... yes
[... ]
configure: WARNING: OCI8 extension: ORACLE_HOME is not set,
looking for default Oracle Instant Client instead
checking Oracle Instant Client directory...
/usr/lib/oracle/12.1/client64/lib
checking Oracle Instant Client SDK header directory...
/usr/include/oracle/12.1/client64
checking Oracle Instant Client library version compatibility... 12.1
[... ]
再次编辑 php.ini,添加 PHP OCI8:
extension=oci8.so
确认安装:
$ php--ri oci8
oci8
OCI8 Support=> enabled
OCI8 DTrace Support=> enabled
OCI8 Version=> 2.0.2-dev
Revision=>$Id: b30fb4bef45d9f5ce8a56b736f1546ea0cff08ef$
Oracle Run-time Client Library Version=> 12.1.0.1.0
Oracle Compile-time Instant Client Version=> 12.1
Directive=> Local Value=> Master Value
oci8.max_persistent=>-1=>-1
oci8.persistent_timeout=>-1=>-1
oci8.ping_interval=> 60=> 60
oci8.privileged_connect=> Off=> Off
oci8.statement_cache_size=> 20=> 20
oci8.default_prefetch=> 100=> 100
oci8.old_oci_close_semantics=> Off=> Off
oci8.connection_class=> no value=> no value
oci8.events=> Off=> Off
Statistics=>
Active Persistent Connections=> 0
Active Connections=> 0
PHP OCI8安装说明
为了支持 DTrace,需要从 PECL安装 PHP OCI8 2.0,因为 PHP 5.4和 PHP 5.5包含的 PHP OCI8 1.4没有 DTrace探测器。将来,在 PHP 5.6发布后,您就能够在构建 PHP时配置支持 DTrace的 PHP OCI8。
当然,您可以通过 Oracle Instant Client zip文件安装 PHP OCI8,也可以仅使用现有的 ORACLE_HOME安装。
您可以在不包含或未配置 DTrace的 PHP版本上安装启用 DTrace的 PHP OCI8。这包括 PHP早期版本。您将能够跟踪 PHP OCI8探测器,但无法跟踪核心 PHP探测器。类似地,您可以在启用 DTrace的 PHP上安装禁用 DTrace的 PHP OCI8。
如果您使用 phpize和 configure(而不是 pecl)从 PECL安装 PHP OCI8 2.0,则仍需设置 PHP_DTRACE=yes。这是因为 PECL软件包有限的 configure脚本将忽略--enable-dtrace选项。
PHP OCI8 2.0配置脚本适合“真正的”DTrace使用,但 Linux SystemTap不会跟踪扩展。
注意,DTrace优化后的二进制文件产生的输出可能与我们所见到的代码不尽相同。
验证 PHP DTrace探测器
以 root用户身份启用 DTrace,允许普通用户记录跟踪信息:
# modprobe fasttrap
# chmod 666/dev/dtrace/helper
您可以使用 ACL软件包规则限制特定用户对设备的访问,而非使用 chmod命令。
作为普通用户运行 php,不带任何选项。PHP将启动,然后等待输入:
$ php
以 root用户身份列出可用的 DTrace探测器。列出了 PHP核心探测器和 PHP OCI8探测器:
# dtrace-l-m php-m oci8.so
4 php9559 php dtrace_compile_file compile-file-entry
5 php9559 php dtrace_compile_file compile-file-return
6 php9559 php zend_error error
7 php9559 php ZEND_CATCH_SPEC_CONST_CV_HANDLER exception-caught
8 php9559 php zend_throw_exception_internal exception-thrown
9 php9559 php dtrace_execute_ex execute-entry
10 php9559 php dtrace_execute_internal execute-entry
11 php9559 php dtrace_execute_ex execute-return
12 php9559 php dtrace_execute_internal execute-return
13 php9559 php dtrace_execute_ex function-entry
14 php9559 php dtrace_execute_ex function-return
15 php9559 php php_request_shutdown request-shutdown
16 php9559 php php_request_startup request-startup
17 php9559 oci8.so php_oci_dtrace_check_connection oci8-check-connection
18 php9559 oci8.so php_oci_do_connect oci8-connect-entry
19 php9559 oci8.so php_oci_persistent_helper oci8-connect-expiry
20 php9559 oci8.so php_oci_do_connect_ex oci8-connect-lookup
21 php9559 oci8.so php_oci_pconnection_list_np_dtor oci8-connect-p-dtor-close
22 php9559 oci8.so php_oci_pconnection_list_np_dtor oci8-connect-p-dtor-release
23 php9559 oci8.so php_oci_do_connect oci8-connect-return
24 php9559 oci8.so php_oci_do_connect_ex oci8-connect-type
25 php9559 oci8.so php_oci_error oci8-error
26 php9559 oci8.so php_oci_statement_execute oci8-execute-mode
27 php9559 oci8.so php_oci_create_spool oci8-sesspool-create
28 php9559 oci8.so php_oci_create_session oci8-sesspool-stats
29 php9559 oci8.so php_oci_create_session oci8-sesspool-type
30 php9559 oci8.so php_oci_statement_create oci8-sqltext
PHP手册中详细记载了核心 PHP探测器。PHP OCI8探测器如下所述。
在用户终端,用 Ctrl-C停止 php可执行文件。
$ php
^C
$
PHP OCI8 2.0 DTrace探测器概述
静态 PHP OCI8 2.0探测器可分为“用户”探测器和“维护者”探测器。后者对于 PHP OCI8维护者更有用,可在扩展开发期间验证功能。所有探测器均以参数形式返回数据。官方文档中详细介绍了 PHP OCI8 DTrace探测器。
在 OCI8 2.0.2中,用户探测器包括:
oci8-connect-entry—由 oci_connect()、oci_pconnect()和 oci_new_connect()启动。在建立数据库连接之前触发。
char*username—连接用户名。
char*dbname—数据库连接字符串。
char*charset—指定的字符集。
long session_mode— OCI_SYSDBA(0x2)、OCI_SYSOPER(0x4)和 OCI_CRED_EXT(1<<31)的二进制“或”(或者过去我所使用平台上的-2147483648)。默认情况下,设置为 0。
int persistent—如果调用了 oci_pconnect(),则设置为 1;否则设置为 0。
int exclusive—如果调用了 oci_new_connect(),则设置为 1;否则设置为 0。
oci8-connect-return—在连接的末尾触发。
void*connection—连接结构的地址。
oci8-check-connection—如果 Oracle错误可能已经导致连接失效,则启动。
void*connection—连接结构的地址。
int is_open—如果 errcode或 server_status指示连接无效且必须重新创建,则为 0。
long errcode— Oracle错误编号。
unsigned long server_status—为 Oracle库的一个指示器,指示连接是否无效。如果因为 errcode指示连接无效导致 is_open为 0,则 server_status为其默认值 1。
oci8-sqltext—执行 oci_parse()时启动。
void*connection—连接结构的地址。
char*sql—所执行的 SQL语句的文本。
oci8-error—如果发生 Oracle错误,则启动。
int status— Oracle返回失败的 Oracle库调用的状态,如-1代表 Oracle的 OCI_ERROR,1代表 Oracle的 OCI_SUCCESS_WITH_INFO。请参见 Oracle的 oci.h,了解所有定义。
long errcode— Oracle错误编号。
oci8-execute-mode—指示 oci_execute()调用的提交状态。
void*connection—连接结构的地址。
unsigned int mode—传递给 Oracle库的模式,如 OCI_NO_AUTO_COMMIT(0x00)、OCI_DESCRIBE_ONLY(0x10)或 OCI_COMMIT_ON_SUCCESS(0x20)。
注:最新的 OCI8 2.0.6中包含 oci8-connection-close探测器,有几个探测器现在也具有 client_id参数和指向语句结构的指针。
维护者探测器如下所示。参数描述请参考 PHP OCI8源代码。
oci8-connect-p-dtor-close
void*connection
oci8-connect-p-dtor-release
void*connection
oci8-connect-lookup
void*connection
int is_stub
oci8-connect-expiry
void*connection
int is_stub
long idle_expiry
long timestamp
oci8-connect-type
int persistent
int exclusive
void*connection
long num_persistent
long num_connections
oci8-sesspool-create
void*session_pool
oci8-sesspool-stats
unsigned long free
unsigned long busy
unsigned long open
oci8-sesspool-type
int type
void*session_pool
PHP OCI8 2.0中的探测器代替了 PHP OCI8 1.4中使用的 oci_internal_debug()跟踪。该函数已变成一条空指令,不执行任何操作。
使用 PHP OCI8和 DTrace
执行以下步骤。
创建一个简单的 PHP文件 oci8.php来查询数据库:
<?php
error_reporting(0);
ini_set('display_errors','Off');
function do_query($c,$sql)
{
$s= oci_parse($c,$sql);
if(!$s)
return;
$r= oci_execute($s);
if(!$r)
return;
while(($row= oci_fetch_row($s))!= false){
foreach($row as$item){
echo$item."";
}
echo"\n";
}
}
$c= oci_new_connect('hr','welcome','localhost/pdborcl');
do_query($c,"select city from locations where rownum< 5 order by 1");
do_query($c,"select something from does_not_exist");
?>
创建一个 D脚本 user_oci8.d来探测 oci8.php的执行:
#!/usr/sbin/dtrace-Zs
# This script is for OCI8 2.0.2
php*:::oci8-connect-entry
{
printf("PHP connect-entry\n");
printf("\t username%s\n", arg0? copyinstr(arg0):"");
printf("\t dbname%s\n", arg1? copyinstr(arg1):"");
printf("\t charset%s\n", arg2? copyinstr(arg2):"");
printf("\t session_mode%ld\n",(long)arg3);
printf("\t persistent%d\n",(int)arg4);
printf("\t exclusive%d\n",(int)arg5);
}
php*:::oci8-connect-return
{
printf("PHP oci8-connect-return\n");
printf("\t connection 0x%p\n",(void*)arg0);
}
php*:::oci8-connection-close
{
printf("PHP oci8-connect-close\n");
printf("\t connection 0x%p\n",(void*)arg0);
}
php*:::oci8-error
{
printf("PHP oci8-error\n");
printf("\t status%d\n",(int)arg0);
printf("\t errcode%ld\n",(long)arg1);
}
php*:::oci8-check-connection
{
printf("PHP oci8-check-connection\n");
printf("\t connection 0x%p\n",(void*)arg0);
printf("\t is_open%d\n", arg1);
printf("\t errcode%ld\n",(long)arg2);
printf("\t server_status%lu\n",(unsigned long)arg3);
}
php*:::oci8-sqltext
{
printf("PHP oci8-sqltext\n");
printf("\t connection 0x%p\n",(void*)arg0);
printf("\t sql%s\n", arg0? copyinstr(arg1):"");
}
php*:::oci8-execute-mode
{
printf("PHP oci8-execute-mode\n");
printf("\t connection 0x%p\n",(void*)arg0);
printf("\t mode 0x%x\n", arg1);
}
使用 OCI8 2.0.6,一些参数的数值需要调整,才能满足现在一些新增参数的需要。
以 root用户身份启动 D脚本。该脚本将暂停,等待探测器触发:
# chmod+x user_oci8.d
#./user_oci8.d
(稍后,体验完 PHP之后,可以使用 Ctrl-C关闭此终端。)
在另一个窗口中运行命令行 PHP。显示成功查询的输入:
$ php oci8.php
Beijing
Bern
Bombay
Geneva
在运行 D脚本的 root终端,将显示 PHP执行期间触发的探测器:
#./user_oci8.d
dtrace: script'user_oci8.d' matched 0 probes
CPU ID FUNCTION:NAME
1 18 php_oci_do_connect:oci8-connect-entry PHP connect-entry
username hr
dbname localhost/pdborcl
charset
session_mode 0
persistent 0
exclusive 0
0 23 php_oci_do_connect:oci8-connect-return PHP oci8-connect-return
connection 0x7f64e112cff0
0 31 php_oci_statement_create:oci8-sqltext PHP oci8-sqltext
connection 0x7f64e112cff0
sql select city from locations where rownum< 5 order by 1
0 27 php_oci_statement_execute:oci8-execute-mode PHP oci8-execute-mode
connection 0x7f64e112cff0
mode 0x20
0 31 php_oci_statement_create:oci8-sqltext PHP oci8-sqltext
connection 0x7f64e112cff0
sql select something from does_not_exist
0 27 php_oci_statement_execute:oci8-execute-mode PHP oci8-execute-mode
connection 0x7f64e112cff0
mode 0x20
0 26 php_oci_error:oci8-error PHP oci8-error
status-1
errcode 942
0 17 php_oci_dtrace_check_connection:oci8-check-connection PHP oci8-check-connection
connection 0x7f64e112cff0
is_open 1
errcode 942
server_status 1
0 25 php_oci_connection_close:oci8-connection-close PHP oci8-connect-close
connection 0x7f64e112cff0
(将-q添加到 user_oci8.d的/usr/sbin/dtrace参数将隐藏 CPU和 ID详细信息。)
在多 CPU计算机上,探测器可能不会顺序出现,具体取决于哪个 CPU正在处理探测器。显示探测器时间戳将有助于消除混淆,例如:
php*:::oci8-connect-entry
{
printf("PHP connect-entry at%lld\n", walltimestamp);
}
从 user_oci8.d DTrace输出中,您可以看到以下内容:
发起的连接(oci8-connect-entry)。连接到 localhost/pdborcl数据库的用户 hr。因为 exclusive和 persistent均为 0,所以是一个 oci_connect()调用。未请求任何显式的字符集。请求的是默认的会话模式(oci_connect的第五个可选参数)。
对两条 SQL语句进行分析(oci8-sqltext),并以 0x20(即 OCI_COMMIT_ON_SUCCESS)模式执行(oci-execute-mode)。
生成了(oci8-error)一条 Oracle错误— ORA-942(表或视图不存在)。
该错误导致要验证连接状态(oci8-check-connection)。is_open的值为 1,表示连接正常。
通过这些信息,您可以跟踪有问题的语句执行和连接问题。
总结
DTrace是一个非常强大的实用程序,本文只是有关其用法的只言片语。通过上述示例,可将 PHP OCI8跟踪与核心 PHP跟踪相集成。您可以设置 PHP函数调用的时间,计算调用的次数。您可以深入了解 PHP进行的操作系统调用。Bryan Cantrill在 DTrace和 PHP(演示)中发布了一些核心 PHP跟踪的示例。(注意,博客平台升级导致其博文中的一个反斜杠显示为两个反斜杠。而且,您不再需要单独的 PHP DTrace扩展。)Brendan Gregg的 DTrace Toolkit包含许多有用的 DTrace脚本。还有各种不同的博客。
记住,DTrace的目的是始终启用其功能,适合开发和生产(此过程最需要 DTrace)。DTrace的设计意味着探测器不受监视时零开销。