Category Archives: php

PHP的多进程互斥和锁定机制讨论

据说目前PHP并没有完善的线程支持,甚至部署到基于线程模型的httpd服务器都会产生一些问题,但即使是多进程模型下的PHP,也难免出现多进程共同访问同一资源的情况。比如整个程序共享的数据缓存,或者因为资源受限而必须对特定处理过程进行排队,以及针对每个用户生成唯一的某种标识的情形。PHP语言自身没有提供进程互斥和锁定机制,因而使得在这些情况下的编程遇到了困难,目前了解到的可选的办法有以下这些: 利用MySQL的锁定机制来实现互斥。缺点是增大了数据库服务器的连接负担,并且使得程序依赖于数据库服务才能正常工作。 利用文件锁机制。也就是利用flock函数通过文件实现锁定和互斥机制,来模拟通用编程模型下的锁定原语的工作方式。这种方式在以前以纯文本文件为存储引擎的时代成为保护数据完整性的必备元素,现在在使用文本文件作为缓存媒介的场合也相当常见。PmWiki应该也是使用了这个机制来对多人同时编辑一个页面的情形进行提醒。不过文件锁机制多少会调用到宿主操作系统上的文件锁特性,因此在使用时一定要检查服务器操作系统是否为PHP环境提供了完善可靠的文件锁机制。 利用共享内存空间计数。PHP可以利用shmop_open函数开辟一块内存空间,在服务进程之间共享数据,为了保证共享数据的互斥安全访问,可以使用sem_get、sem_acquire和sem_release这组函数实现共享计数锁定机制。这种办法在后台实际是调用了系统的ipc服务来实现。

Posted in php | Leave a comment

php Safe_mode影响参数

函数名 限制 dbmopen() 检查被操作的文件或目录是否与正在执行的脚本有相同的 UID(所有者)。 dbase_open() 检查被操作的文件或目录是否与正在执行的脚本有相同的 UID(所有者)。 filepro() 检查被操作的文件或目录是否与正在执行的脚本有相同的 UID(所有者)。 filepro_rowcount() 检查被操作的文件或目录是否与正在执行的脚本有相同的 UID(所有者)。 filepro_retrieve() 检查被操作的文件或目录是否与正在执行的脚本有相同的 UID(所有者)。 ifx_* sql_safe_mode 限制, (!= safe mode) ingres_* sql_safe_mode 限制, (!= safe mode) mysql_* sql_safe_mode 限制, (!= safe mode) pg_loimport() 检查被操作的文件或目录是否与正在执行的脚本有相同的 UID(所有者)。 posix_mkfifo() 检查被操作的目录是否与正在执行的脚本有相同的 … Continue reading

Posted in php | Leave a comment

windows下创建.htaccess文件

习惯了LINUX下创建HTACCESS,其实在WINDOWS下可以用下面的简单方法创建 首先cmd.exe,然后使用重命名命令ren 1.txt .htaccess 就OK了

Posted in php | Leave a comment

php printf

printf()函数优点在于可以格式化输出! 格式如下:%['padding_character][-][width][.precision]type 所有的转换说明都是以%开始,如果想打印一个%符号,必须用%%. 参数’padding_character是可选.它将被用来填充变量直至所指定的宽度.该参数的作用就在变量前面填充.默认的填充字符是一个空格,如果指定0或者空格,就不需要 ‘ 单引号作为前缀,其他字符就必须指定 ‘ 作为前缀. 参数 – 是可选.它指左对齐,默认是右对齐. 参数width是指被替换的变量的长度. 参数precision表示以小数点开始.它指明小数点后要显示的位数. 参数type 是类型码,请看下表: 类型   |   含义 b       |    解释为整数并作为二进制输出. c        |    解释为整数并作为字符表示输出(ASCII码). d        |   解释为整数并作为整数输出. f         |   解释为双精度并作为浮点数输出. o        |   解释为整数并作为八进制数输出. s        |   解释为字符串并为字符串输出. u        |   解释为整数并作为非指定小数输出. x        |    解释为整数并作为带有小写字母a-f的十六进制数输出 X       |   解释为整数并作为带有大写字母A-F的十六进制数输出 演示: ——————————————————————————————— <?php $str … Continue reading

Posted in php | Leave a comment

php 调用.NET soap

SOAP:简单对象访问协议,简单对象访问协议(SOAP)是一种轻量的、简单的、基于 XML 的协议,它被设计成在 WEB 上交换结构化的和固化的信息。 SOAP 可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议( HTTP),简单邮件传输协议(SMTP),多用途网际邮件扩充协议(MIME)。它还支持从消息系统到远程过程调用(RPC)等大量的应用程序。 .NET中开发的SOAP文件大多数为wsdl格式,PHP在调用的时候可以使用soapclient扩展,但是其中有一些需要注意的地方,主要是函数的参数上面。如下面代码: $client = new SoapClient(‘http://192.168.1.3/SMS_BlueWings/SMS_BlueWingsInfo.asmx?wsdl’); $param=array(‘bjyl’,md5(‘bjyl’),’192.168.1.1′); $param=array(‘strUserName’=>’bjylkl’,’strUserPass’=>md5(‘bjylkl’),’strUserIP’=>’192.168.1.0′); $user_hash=$client->__soapCall(“GetUserLogin”,array(‘bjylkl’,md5(‘bjylkl’),’192.168.1.0′)); //$client->GetUserLogin(new SoapParam(‘bjylkl’,’strUserName’),new SoapParam(md5(‘bjyl’),’strUserPass’),new SoapParam(’192.168.1.0′,’strUserIP’)); $user_hash=$client->__soapCall(“GetUserLogin”, array(‘paramters’=>$param)); $user_hash=$user_hash->GetUserLoginResult; echo ‘login’; echo $user_hash; //$client->GetUserLogin(‘bjylkl’,’bjylkl’,’192.168.1.0′); //var_dump($client->__getFunctions()); $param1=array(‘strUserHash’=>$user_hash,’strCount’=>3); print_r($client->__soapCall(‘SetMessageBegin’,array(‘paramters’=>$param1))); echo ‘begin’; $message=”系12快快快31qwe11HRMNH@###S”; $mobile=’13844456788′; $param1=array(‘strUserHash’=>$user_hash,’strTarPhone’=>$mobile,’strMessage’=>$message); print_r($client->__soapCall(‘SetMessage’,array(‘paramters’=>$param1))); echo ‘set’; $param1=array(‘strUserHash’=>$user_hash,’strPDate’=>”); … Continue reading

Posted in php, web | Leave a comment

Drupal入门进阶之解析Drupal引导流程

Drupal是一个开源的内容管理系统(CMS)平台,它是用PHP写成的。主要用于构造提供多种功能和服务的动态网站,这些功能包括用户管理 (UserAdministration)、发布工作流(Publishing Workflow)、讨论、新闻聚合(NewsAggregation)、元数据(Metadata)操作和用于内容共享的XML发布。Drupal有一个优秀的模块化结构,提供了许多模块,包括短消息、个性化书签、网站管理、Blog、日记、电子商务、电子出版、留言簿、Job、网上电影院、论坛、投票等模块。并且Drupal模块的下载、安装、定制非常方便。Drupal诞生于2000年,是一个基于PHP语言编写的用于开发网站的开发型CMF(内容管理框架)。形象的说,Drupal是一个用于开发网站的操作系统;本质上说,Drupal是一个大型的PHP类库。Drupal是一套开源系统,全球数以万计的WEB开发专家都在为Drupal技术社区贡献代码。因此,Drupal的代码在安全性、健壮性上具有世界最高水平。这也是美国白宫、美国商务部、法国政府、纽约时报、SONY等著名政府和机构纷纷采用 Drupal建设网站的最重要的原因。 Drupal不等于模板建站系统,他们之间有着本质的区别。Drupal的学习曲线相当漫长和陡峭,比PHP难度大得多,要求也高的多。事实上,只有精通 XHTML、CSS、Javascript、PHP、MySql的开发人员,经过长期刻苦的学习,才有可能真正的驾驭Drupal,Drupal是给经验丰富的程序员用的,而不是给一般普通用户用的。模板建站系统则不同,模板系统根本不需要任何学习,不需要任何编程知识就可以使用,只适合初级用户搭建一些简单的网站。 Drupal具有业内最强的定制能力和灵活性,这也是造成Drupal学习难度太大的根本原因,这也是没有办法的事情,灵活性的提高必然使复杂程度提高。因此,Drupal技术圈内有一句名言——“Drupal有难度,学习需谨慎。” 好了,前面的废话已经很多了,而且也是COPY过来的,我们直接转入正题,注意:以下全为作者原版,如果要转载请注明转自:w3cstudio.com。虽然Drupal很难,但是只要我们耐心的持久的去学习和理解其的架构思想,我们还是能掌握其的CORE的。 现在的PHP架构越来越喜欢使用类似OS的引导程序了,其的好处在于封锁了系统的入口,所有的操作都需要从入口进入,这在安全上面对于系统来说很方便,而且对于一些验证等需要进行繁琐操作的程序了提供了便利性,无需让程序员去对应每个模块进行这些操作。首先看看Drupal的引导文件index.php。 require_once ‘./includes/bootstrap.inc’; drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL); $return = menu_execute_active_handler(); // Menu status constants are integers; page content is a string. if (is_int($return)) { switch ($return) { case MENU_NOT_FOUND: drupal_not_found(); break; case MENU_ACCESS_DENIED: drupal_access_denied(); break; … Continue reading

Posted in php | Tagged | Leave a comment

PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明

一,十进制(decimal system)转换函数说明 1,十进制转二进制 decbin() 函数 ,如下实例 echo decbin(12); //输出 1100 echo decbin(26); //输出 11010 decbin (PHP 3, PHP 4, PHP 5) decbin — 十进制转换为二进制 说明 string decbin ( int number ) 返回一字符串,包含有给定 number 参数的二进制表示。所能转换的最大数值为十进制的 4294967295,其结果为 32 个 1 的字符串。 2,十进制转八进制 … Continue reading

Posted in php | 1 Comment

php引用详解

php的引用(就是在变量或者函数、对象等前面加上&符号) 在PHP 中引用的意思是:不同的名字访问同一个变量内容. 与C语言中的指针是有差别的.C语言中的指针里面存储的是变量的内容在内存中存放的地址 变量的引用 PHP 的引用允许你用两个变量来指向同一个内容 <? $a=”ABC”; $b =&$a; echo $a;//这里输出:ABC echo $b;//这里输出:ABC $b=”EFG”; echo $a;//这里$a的值变为EFG 所以输出EFG echo $b;//这里输出EFG ?> 函数的传址调用 传址调用我就不多说了 下面直接给出代码 function test(&$a) { $a=$a+100; } $b=1; echo $b;//输出1 test($b);   //这里$b传递给函数的其实是$b的变量内容所处的内存地址,通过在函数里改变$a的值 就可以改变$b的值了 echo “<br>”; echo $b;//输出101 要注意的是,在这里test(1);的话就会出错,原因自己去想 … Continue reading

Posted in php | Leave a comment

drupal开发简介

最近有时间,研究了下DRUPALCMS,发现虽然架构简洁但是确实一个架构灵活性很大的系统,一下是drupal的一些介绍。 什么是Drupal? Drupal是用作建设网站的。它是一个高度模块化,开源的web内容管理框架,它重点建 立在合作之上的。它是一个可扩展的,适应标准的,并努力保持简洁代码和较小脚本的系统。 Drupal 发布版中包含基本的核心功能,其他的额外功能可通过安装模块来获得。Drupal 被设计为可被定制的,但是定制是通过覆写核心功能或者增加模块来完成的,而不是修改核 心组件中的代码。它同样成功的将内容管理和内容表示两者分离。 Drupal 可以被用来建立一个Internet门户;一个个人的,部门的,或者公司的网站;一 个电子商务站点;一个资源分类站点;一个在线报纸;一个图库;一个内部网,这里仅提到 了一部分。它甚至可被用来教授一个远程学习课程。一个专注于安全方面的小组,通过对威 胁的反应和发行安全更新来保证Drupal 的安全性。还有一个繁荣的社区组织,包括用户, 站点管理员,设计者,和web开发者,非常努力的工作着,以持久的改进软件。 后台管理接口(Administrative Interface) Drupal的后台管理接口与站点的其它部分紧密的集成在了一起,而且默认情况下,使用相 同的主题。第一个用户,也就是用户1,是一个对站点拥有完全权限的超级用户。以用户1 的身份登录后,你将在你的用户区块(参看“区块”部分)中看到管理站点的一个链接。点击 这一链接,你将进入到Drupal的后台管理接口页面。根据用户对站点访问权限的不同,每 个用户的区块都会有一个不同的链接。 模块(Modules) Drupal是一个完全模块化的框架。功能都包含在模块中,而模块可以被启用或者禁用(一 些必须的模块不能被禁用)。来向Drupal 站点添加特性有3 种方式:启用已存在的模块(核 心模块),安装Drupal社区成员编写的模块(第3方模块),编写自己的模块。这样,就 可以根据站点的需要来添加相应的模块,需要的功能少,所需的模块也就少,需要很多功能, 就添加多一些的模块。 新添的内容类型比如处方、日志、或者文件,新添的行为比如e-mail通知、P2P 发布、和 聚合,等等都是通过模块实现的。Drupal 使用了反转控制(inversion of control)设计 模式,框架只在合适的时间调用相应的模块功能。这些为了模块完成它们的任务提供的机会 被称为钩子。 钩子(Hooks) 11/237 … Continue reading

Posted in php | Tagged , | Leave a comment

http响应代码

在写WEB程序,比如说遇到跳转和提示时,运用正确的RESPONSE CODES是非常重要的,虽然在用户看来都是一个结果,可是对SPIDER来说可不是一样的了,比如说网站的地址变了,一般做转向时都会用到301的响应代码,以下是从WORDPRESS中的响应代码函数 /** * Retrieve the description for the HTTP status. * * @since 2.3.0 * * @param int $code HTTP status code. * @return string Empty string if not found, or description if found. */ function get_status_header_desc( $code ) … Continue reading

Posted in php | Tagged , | Leave a comment