在PHP中以非ROOT身份执行root命令 相信大家都遇到过这样的情况,想让apache运行一个root才能运行的命令或脚本.如何实现?方法如下: 比较科学且较为安全的办法是采用sudo,一般apache运行时的USER ID是apache,这里就假设是apache吧,我们要在php中调用mycommand程序完成一些必须有root权限才能完成的工作。 (1)首先必须确保已经安装了sudo程序包,如果没有请安装: Debian下: apt-get install sudo Redhat下: rpm -ivh sudo*.rpm (2)修改配置文件(/etc/sudoers)添加apache用户: 这个文件必须以root身份使用visudo命令来编辑,这是系统的要求. 用visudo打开后,在文件末尾添加一行: apache ALL=NOPASSWD:/usr/sbin/mycommand 意思是:apache在执行mycommand这个程序的时候以root权限执行且不用密码。 保存并退出。 (3)在php脚本里调用mycommand这个命令了的方法: <?php system(“sudo mycommand”); ?> 可以通过PHP变量传递参数。 需要注意的是mycommand的命令的可执行属性.
PHP中的时间有2个格式化函数:date()和gmdate(),在官方的文档中的描述为: date — 格式化一个本地时间/日期 gmdate — 格式化一个 GMT/UTC 日期/时间,返回的是格林威治标准时(GMT)。 举个例子,我们现在所在的时区是+8,那么服务器运行以下脚本返回的时间应该是这样的: 当前时间假定是2007-03-14 12:15:27 echo date(‘Y-m-d H:i:s’, time()); 输出为:2007-03-14 12:15:27 echo gmdate(‘Y-m-d H:i:s’, time()); 输出为:2007-03-14 04:15:27 但是这只是在Linux+Apache下运行PHP所得的结果,如果在Windows下运行,则2个函数返回都是:2007-03-14 04:15:27。 所以,我们应该给一个兼容性的写法,统一使用gmdate,并手工设置当前时区,写法改进如下: echo gmdate(‘Y-m-d H:i:s’, time() + 3600 * 8); 这样不管在Linux+Apache下还是Windows下都得到了正确的结果,当然这样写还有一个好处,当网站是面向全世界的时候,那么网站用户只要设置所在的时区,程序自动根据用户设置的时区进行时间计算,数据库中信息发布时间只存当前的time()所生成的时间,那么在中国+8时区看到的发布时间是:2007-03-14 12:15:27,那么在欧洲+2时区用户看到这个信息的发布时间是:2007-03-14 06:15:27,这样信息的时间就全部对应正确了。 ==================================================== 修改PHP的默认时区 每个地区都有自己的本地时间,在网上以及无线电通信中,时间的转换问题就显得格外突出。整个地球分为二十四个时区,每个时区都有自己的本地时间。在国际无线电或网络通信场合,为了统一起见,使用一个统一的时间,称为通用协调时(UTC,Universal Time Coordinated),是由世界时间标准设定的全球标准时间。UTC原先也被称为格林威治标准时间(GMT,Greenwich Mean Time),都与英国伦敦的本地时间相同。 PHP默认的时区设置是UTC时间,而北京正好位于时区的东八区,领先UTC八个小时。所以在使用PHP中像time()等获取当前时间的函数时,得到的时间总是不对,表现是和北京时间相差八个小时。如果希望正确的显示北京时间,就需要修改默认的时区设置,可以通过以下两种方式完成。 如果使用的是独立的服务器,有权限修改配置文件,设置时区就可以通过修改php.ini中的date.timezone属性完成。我们可以将这个属性的值设置为”Asia/Shang”、”Asia/Chongqing”、”Etc/GMT-8″或PRC等中的一个,再在PHP脚本中获取的当前时间就是北京时间。修改PHP的配置文件如下所示: date.timezone = Etc/GMT-8 //在配置文件中设置默认时区为东8区(北京时间) 如果您使用的是共享服务器,没有权限修改配置文件php.ini,并且PHP版本又在5.1.0以上,也可以在输出时间之前调用date_default_timezone_set()函数设置时区。该函数需要提供一个时区标识符作为参数,和配置文件中date.timezone属性的值相同。该函数的使用如下所示: date_default_timezone_set(‘PRC’); //在输出时间之前设置时区,PRC为中华人民共和国 echo date(‘Y-m-d H:i:s’, time()); //输出的当前时间为北京时间 [...]
在PHP中使用Web服务,经常用到NuSOAP。 NuSOAP 是 PHP 环境下的 WEB 服务编程工具,用于创建或调用 WEB 服务。它是一个开源软件,完全由PHP语言编写,由一系列 PHP 类组成,不需要扩展库的支持,这种特性使得 NuSOAP 可以用于所有的 PHP 环境,不受服务器安全设置的影响。 许多使用 NuSOAP 调用 .NET Web Service 的朋友可能都遇到过中文乱码问题,本文介绍这一问题的出现的原因和相应的解决方法。 NuSOAP 调用 Web Service 出现乱码的原因: 通常我们进行 Web Service 开发时都是用的 UTF-8 编码,这时我们需要设置 : Code: $client->soap_defencoding = ’utf-8′; 同时,需要让 xml 以同样的编码方式传递: Code: $client->xml_encoding = ’utf-8′; 到现在,应该是一切正常了才对,但是我们在输出结果的时候,却发现,返回的是乱码。 NuSOAP 调用 Web Service 出现乱码的解决方法: 实际上,开启了调试功能的朋友,相信会发现 $client->response 返回的是正确的结果,为什么 $result = $client->call($action, array(‘parameters’ => $param)); 却是乱码呢? 研究过 NuSOAP 代码后我们会发现,当 xml_encoding 设置为 UTF-8 时,NuSOAP 会检测 decode_utf8 的设置,如果为 true ,会执行 PHP 里面的 utf8_decode 函数,而 NuSOAP 默认为 true,因此,我们需要设置: Code: $client->soap_defencoding = ’utf-8′; $client->decode_utf8 = false; $client->xml_encoding = ’utf-8′;
NuSOAP 是 PHP 环境下的 WEB 服务编程工具,用于创建或调用 WEB 服务。它是一个开源软件,当前版本是 0.7.2 ,支持 SOAP1.1 、 WSDL1.1 ,可以与其他支持 SOAP1.1 和 WSDL1.1 的系统互操作。 NuSOAP 完全由PHP语言编写,由一系列 PHP 类组成,不需要扩展库的支持,这种特性使得 NuSOAP 可以用于所有的 PHP 环境,不受服务器安全设置的影响。 1. NuSOAP 的获取和安装 NuSOAP 项目建立在 SourceForge 上,网络地址是: http://sourceforge.net/projects/nusoap/ 或 http://dietrich.ganx4.com/nusoap,这里,可以下载到 NuSOAP 的最新的版本。 NuSOAP 的安装比较简单,把下载的 NuSOAP 的文件拷贝到服务器上,可以放在独立的目录里,也可以与程序代码放在相同的目录里,只要你的 PHP 代码能够访问到这些文件就可以了。 本文的测试环境基于 PHP4.3.2 和 NuSOAP 0.7.2 版本, NuSOAP 安装在 WEB 目录“ /nusoap ”里,有两个子目录, [...]
在模块化的系统设计中, 一般应该在模块内, 通过获取模块的部署路径(dirname(__FILE__), php5.3以后更是提供了__DIR__常量)从而使用绝对路径.
//excel时间戳转为php时间戳 public function xls2tstamp($date) { $date=$date>25568?$date:25569; /*There was a bug if Converting date before 1-1-1970 (tstamp 0)*/ $ofs=(70 * 365 + 17+2) * 86400; return ($date * 86400) – $ofs; }
php编译安装时,configure: error: Cannot find MySQL header files under 解决办法: 执行下面命令即可 ln -s /usr/local/mysql/bin/mysql_config /usr/bin/mysql_config
近期评论