Skip to content

{ Category Archives } PHP

The MySQL C API

简介 C APIs包含在mysqlclient库文件当中与MySQL的源代码一块发行,用于连接到数据库和执行数据库查询。有一些例子在MySQL原代码的clients目录里。 MySQL C 变量类型 以下变量类型在MySQL的库当中定义。我们需要这些变量是为了使用MySQL的函数。这些变量有详细的解释,但是这些解释对于写代码来说并不重要。 MYSQL 要连接MYSQL,必须建立MYSQL实例,通过mysql_init初始化方能开始进行连接。 [code=c]typedef struct st_mysql { NET           net;            /* Communication parameters */ gptr          connector_fd;   /* ConnectorFd for SSL */ char          *host,*user,*passwd,*unix_socket, *server_version,*host_info,*info,*db; unsigned int  port,client_flag,server_capabilities; unsigned int  protocol_version; unsigned int  field_count; unsigned int  server_status; unsigned long thread_id;      /* Id for connection in server */ my_ulonglong affected_rows; my_ulonglong insert_id;       [...]

转:Zend API:深入 PHP 内核

转:Zend API:深入 PHP 内核

php基础测试

如何改进以下的这行php代码?这段代码可以被用来测试php工程师应聘者。 < ? echo(“Search results for query: ” .$_GET['query'] . “.”); ? > 这段代码非常适合用来测试一个php开发人员是否合格。因为这段代码并没有要求太多记忆上的东西(例如函数的记忆),但是对安全,性能,兼容性上都做了考察。

用 memcache 来存储 session

PECL :: Package :: memcache 2.1.1 版本的 Changelog 中有一条: – Added experimental session storage support. You can use memcached as session storage. 也就是可以直接用 memcache 来作 PHP 的 session.save_handler。 1. 安装 memcached: 标准的 ./configure; make; make install 注意 memcached 用 libevent 来作事件驱动,所以要先安装有 libevent。 2. 安装 pecl::memcache,用 pecl 命令行工具安装: pecl install memcache 或直接从源码安装: phpize ./configure make make [...]

编码的陷阱之 mysql

MySQL 从 4.1 开始对多语言的支持有了很大变化 ,这导致了问题的出现。 许多 PHP 程序以 MySQL 作为默认的数据库管理软件,但它们一般不区分 MySQL 4.1 与 4.1 以下版本的区别,笼统地称“MySQL 3.xx.xx 以上版本”就满足安装需求了。因为 latin1 在许多地方 (下边会详细描述具体是哪些地方) 作为默认的字符集,成功的蒙蔽了许多 PHP 程序的开发者和用户,掩盖了在中文等语言环境下会出现的问题。 简单的说,MySQL 自身的变化和使用 MySQL 的 PHP 程序对此忽略,导致了问题的出现和复杂化,而由于大部分用户使用的是英文,使这种问题不被重视。这里提到的 PHP 程序,以 WordPress 为例。 MySQL 4.1 字符集支持的粒度:MySQL 4.1 对于字符集的指定可以细化到一台机器上安装的 MySQL,其中的一个数据库,其中的一张表,其中的一栏,应该用什么字符集。但是,传统的 Web 程序在创建数据库和数据表时并没有使用那么复杂的配置,它们用的是默认的配置,那么,默认的配置从何而来呢? 编译 MySQL 时,指定了一个默认的字符集,这个字符集是 latin1; 安装 MySQL 时,可以在配置文件 (my.ini,my.cnf) 中指定一个默认的的字符集,如果没指定,这个值继承自编译时指定的; 启动 mysqld 时,可以在命令行参数中指定一个默认的的字符集,如果没指定,这个值继承自配置文件中的; 此时 character_set_server [...]

被保护: 我的WebService

盛大灵游记:http://shop.ourgame.com/GLGGBilling/Service4Partner.asmx 新浪机战:http://222.77.177.169/sinapay/ChargeMoneyInterface1.asmx 腾龙功夫世界:http://secure.tengwu.com.cn/MainService.asmx 星级家园:(非webservice提供接口) PHP5 Soap 接口代码框架: try { $response = $soap_client->__soapCall(“m_GetRolesList”,$params); if ($response['m_GetRolesListResult'] != 1) { $err = m_GFSJ_GetErrText($response['m_GetRolesListResult']); $loge->uniLog(“$err”); return false; }else { $logv->uniLog(“{$response['lsRoleIDName']}”); $rolestr = trim($response['lsRoleIDName']); return $rolestr; } } catch (SoapFault $fault) { $loge->uniLog(“faultcode:{$fault->faultcode}\tfaultstring:{$fault->faultstring}”); return false; }

PHP忽略用户中断

        做  Web 开发的人都知道,浏览器和服务器之间是通过 HTTP 协议进行连接通讯的。这是一种基于请求和响应模型的协议。浏览器通过 URL 向某台服务器发起请求(Request),Web 服务器接收到请求,执行一段程序,然后做出响应(Response),也就是一段字符串,这个字符串符合 HTTP 协议的格式,有 HEAD 和 BODY 两部分。 这其中有一个问题,Web  服务器执行一段程序,可能几毫秒就完成,也可能几分钟都完不成。如果程序执行缓慢,用户可能没有耐心等下去,就关闭浏览器了。这个时候,服务器会接收到连 接状态改变的通知,因为 HTTP  是最上层的协议,下面还有一层 TCP 协议,TCP  会知道连接中断。连接一断,服务端的程序会立即停止执行。 现在说到问题的关键了,服务端的程序立即停止执行,如果这个程序只是读取信息的还好说,停了不读了就是了。万一是一个写入的程序呢?比如,用户提交一 段文本,也许服务端的设计比较复杂,需要同时更新好几个表,但由于某些原因,例如其中一个表被其他进程锁定,那么这个程序就会一直等待,这个时候用户要是 关闭浏览器,那程序就不等了,直接退出了。结果就是这条信息保存不完整。 举个具体的例子,用户提交的文本需要写到 A、B、C、D 四个表里,写入 A、B 两个表可能 0.1 毫秒就完成了,但 C 表被另一个进程锁定,那当前进程就得一直等,这时用户关闭浏览器,当前进程退出,那么,就会造成一种状况,A、B 表里有新的内容,而 C、D 表里没有这条内容,产生了严重的数据一致性的问题! 虽然,利用数据库的事务,可以使状态回滚,但结果就是用户的本次提交无效。 现在希望的是,只要用户提交了,就要成功保存,也许遇到意外情况导致执行时间过长,但用户关闭浏览器也没关系。 于是,就需要 ignore_user_abort 这个函数。 当调用 ignore_user_abort(1) 时, 就设定了忽略用户退出这个标志位,也就是不管怎样,也要把程序执行到底,除非在程序中调用了 exit。 其实,还有另一个函数,register_shutdown_function,它可以注册一个函数或方法,在程序退出的时候调用,有些类似于 javascript 里面的 onunload 和 onbeforeunload 事件。 [...]

PHP的一个bug

“Fatal error:Maximum execution time of 0 seconds exceeded” php.ini 设置: max_execution_time = 0 ; Maximum execution time of each script, in seconds max_input_time = 60 ; Maximum amount of time each script may spend parsing request data memory_limit = 128M ; Maximum amount of memory a script may consume (128MB) 这里报错并不是因为脚本执行时间超时,而是输入时间超时,属于错误定位不准确,导致出错信息无效甚至误导编程者。 我的 minicraw 脚本在某些服务器上总是死掉,找了半天,才在 google [...]

PHP清除指定内容的HTML标记

系统带的函数: strip_tags($str); // Strip HTML and PHP tags from a string 自己写的函数: /** * 清除指定内容中的HTML 标记 * * @param string $content * @return string $text */ function clear_tag($content) { $search = array (“‘]*?>.*?‘si”, // 去掉 javascript “‘ ]*?>.*? ‘si”, // 去掉 javascript “‘’si”, // 去掉 HTML 标记 “‘([\r\n])[\s]+’”, // 去掉空白字符 “‘&(quot|#34);’i”, // 替换 HTML 实体 [...]