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

NPAPI简介

Mozilla Firefox的插件是采用的是NPAPI技术。 NPAPI是Netscape Plugin Application Programming Interface的缩写,不难看出这项技术始创于Netscape(也就是Mozilla的前身),但是目前这项技术不仅限于Mozilla而成为了一个通用的标准。 事实上,除了IE使用微软自己的ActiveX技术以外,其他所有浏览器都采用NPAPI作为插件接口,也就是说只要符合NPAPI接口开发的插件,不但可以在Mozilla Firefox上使用,也可以在google Chrome、Apple Safari、Opera等浏览器上使用,我们常用的Flash播放器 、支付宝安全控件都是用NPAPI技术开发的。这些控件让我们可以使用不同的浏览器来播放flash动画和在线支付。

Posted in web | Leave a comment

360安全浏览器应用开发

360浏览器现在主要分为两大部分:安全浏览器(IE)和极速浏览器(CHROME)。 其中安全浏览器的应用开发其实只是使用了浏览器内置的创建POPUP功能,并嵌入设置的网页来完成。 1、首先第一步去360应用开发平台申请WEBAPP的APIKEY 2、之后可以使用360的应用开发本地工具360WEBAPPTOOL,填入申请的KEY,然后选择好相应的设置(这里主要是图片的要求),之后就会生成对应KEY的文件夹,可以将这个文件夹提交了就可以。

Posted in web | Leave a comment

ascii码表

代码 字符 代码 字符 代码 字符 代码 字符 0   32 [空格] 64 @ 96 ` 1   33 ! 65 A 97 a 2   34 “ 66 B 98 b 3   35 # 67 C 99 c … Continue reading

Posted in web | Leave a comment

vc++入门第一篇,如何使用C++生成windows窗口程序

1、首先打开VS2010,新建项目,选择VC++,选择WIN32项目,注意勾选空项目,点击完成即可 2、在源文件文件夹下新建一个CPP文件,拷入一下代码: // GT_HelloWorldWin32.cpp // compile with: /D_UNICODE /DUNICODE /DWIN32 /D_WINDOWS /c #include <windows.h> #include <stdlib.h> #include <string.h> #include <tchar.h> // Global variables // The main window class name. static TCHAR szWindowClass[] = _T(“win32app”); // The string that appears in … Continue reading

Posted in web | Leave a comment

IIS web园概念

IIS 6.0允许将应用程序池配置成一个Web园(Web Garden)。要理解Web园的概念,可以设想这样一种情形:假设有一个IIS 5.0服务器和三个Web网站,每一个Web网站运行着相同的应用程序,如果IIS 5.0能够自动按照圆形循环的模式将请求依次发送给这些功能上等价、实际上分离的Web网站,将负载分离到三个不同的进程,就可以构成一个小型的Web农 场(Web Farm)——这就是Web园。 在IIS 6.0的Web园中,我们不必创建额外的Web网站,只要指定用于某个应用程序池的工作进程的数量就可以了。具体的配置步骤是:打开应用程序池的“属性” 对话框,转到“性能”页,在“Web园”下面的“最大工作进程数”输入框中输入进程数量,如图八。当服务器的负载较小,不需要额外的工作进程时,IIS 6.0在一定的时间后(默认20分钟,可配置)自动缩减实际的工作进程数量;如果负载变大,需要额外的工作进程,IIS 6.0再次增加工作进程数量。这一切操作都自动进行,不需要管理员干预。 Web园:在Web园中你可以配置此应用程序池所使用的最大工作进程数,默认为1,最大可以设置为4000000; 配置使用多个工作进程可以提高该应用程序池处理请求的性能,但是在设置为使用多个工作进程之前,请考虑以下两点: 每一个工作进程都会消耗系统资源和CPU占用率;太多的工作进程会导致系统资源和CPU利用率的急剧消耗; 每一个工作进程都具有自己的状态数据,如果Web应用程序依赖于工作进程保存状态数据,那么可能不支持使用多个工作进程。 问: IIS 6.0 具有一个名为 Web 园的新功能,有了它,可以将应用程序池配置为使用多个工作进程。IIS 何时创建额外的工作进程?在我们实施 Web 园之前,我们应该了解哪些知识? 答: 在您创建应用程序池时,就会通知 IIS 6 创建一个工作进程,以传送指派给该应用程序池的 Web 站点、文件和文件夹的内容。您可以将应用程序池配置为启动多个,而非一个工作进程,这样可以提高可扩展性。这个功能的名为 Web 园,是小型的“Web 农场”。您无需使用多台计算机来传送相同的内容(Web 农场),而是可以使用一台计算机中的多个进程来传送相同的内容。 在将 IIS 6 应用程序配置为 … Continue reading

Posted in web | Leave a comment

WEB开发群(191404718),希望大家加入

上个月,建立了这个群,希望从事于互联网开发的人士能够加入该群,共同探讨WEB开发。如果谁有比较好的类似的QQ群,希望能联系我,378985424,谢谢。

Posted in web | Leave a comment

winform如何实现简单动画

winform开发中,动画的支持还是需要底层的WIN32API支持,主要是需要使用user32.dll public class Win32 { public const Int32 AW_HOR_POSITIVE = 0×00000001; // 从左到右打开窗口 public const Int32 AW_HOR_NEGATIVE = 0×00000002; // 从右到左打开窗口 public const Int32 AW_VER_POSITIVE = 0×00000004; // 从上到下打开窗口 public const Int32 AW_VER_NEGATIVE = 0×00000008; // 从下到上打开窗口 public const Int32 … Continue reading

Posted in web | Leave a comment

修改apache返回的头信息

解压源码,打开include/ap_release.h #define AP_SERVER_BASEVENDOR “Apache Software Foundation” #define AP_SERVER_BASEPRODUCT “Apache” 修改上面的字符串,可以改成IIS之类的,保存,重新编译,httpd.conf里面 ServerTokens Prod

Posted in web | Leave a comment