理处言语然自 » PHP

对MYSQL进行全文检索的PHP类库

正在研究中,如果要看这个程序的详细说明和演示,请到这个地方看,真的很爽: http://steven.haryan.to/php/KwIndex.html 注意,只能在linux,unix下用。

构建支持Master/Slave读写分离的数据库操作类

一般对于访问量比较大的网站来说,采用基本的MySQL Master/Slave 结构是很正常,而且一般都是一台Master,多台Slave的情况,但是一般在进行这个访问的时候问题比较多,因为读写操作必须分离,所以今天没事就构造了这个数据库操作类。 数据库操作类基本特点: 1. 支持一台Master,多台Slave的情况,所有SQL能够强制调用Master来处理 2. 能够自动识别是写入还是读取操作,然后自动连接到需要的Master/Slave服务器。 操作过程中能够自动识别,如果没有Slave,则所有操作都是指向Master的,如果当前连接的Slave无法工作则自动连接其他Slave。对于Slave读取数据采用随机挑选Slave服务器的方式来读取数据 3. 在同一个PHP程序中能够重用连接,不会重复去连接数据库,减少因为反复连接带来的资源消耗 缺点: 1. 对于Slave是采取随机选择Slave来进行读取数据,所以不是真正意义上的负载均衡 2. 每次初始化都是连接好所有的数据库,比较浪费连接资源和时间。 在多个PHP程序中无法保持数据库连接,每次启动都需要连接到远程数据库,浪费了很多连接处理的时间,但是这个跟PHP是脚本程序有关。 3. 无法支持多个Master的情况,同时可定制性比较差,很多东西都是固定的,必须按照固有模式来执行查询 相关: 代码中注释不是很全,部分注释而且不一定正确,所以如果自己使用,最好进行二次修改。 本数据库类参考了我之前写的《简单快速有趣的MySQL数据库操作类:SimpleDB》,可以对照着看。 (类库中的接口我大部分都经过了测试,都正常使用,如果发现不正常或者有更好的想法,请留言)

Ubuntu Apache下PHP配置

1st step 将Ubuntu系统更新到最新状态,在做任何操作之前都要做这一步,以确保系统的稳定,同时也不会有一些莫名其妙的现象出现。 $sudo apt-get update $sudo apt-get dist-upgrade 安装PHP支持 $sudo apt-get install libapache2-mod-php5 $sudo apt-get install php5 如果想支持图形就加php5-gd,如果想支持Mysql就加php5-mysql,这里之所以要单独列出libapache2-mod-php5,主要是由于php5的依赖关系没有做好,有可能会安装上libapache-mod-php4的包,所以为了避免不必要的麻烦,干脆还是单独指定比较好。如果有朋友还是会出现问题,请在新立得中查找libapache-mod-php4包,如果安装的话请将其删除。 修改PHP配置文件,以限制内存和文件最大上传尺寸 我们编辑/etc/php5/apache2/php.ini文件,先做一般配置,在改动之前,请先将该配置文件做个备份。以便在出错的时候可以恢复。 … memory_limit == 8M ==>修改成你所需的内存大小 upload_max_filesize == 2M ==>修改文件最大上传尺寸 … extension=mysql.so 支持Mysql服务 extension=gd.so 支持gd函数 … 其实在Ubuntu下,如果你安装了php5-mysql和php5-gd之后,会自动修改以上二行的,我们做的只不过是确认一下它们前面的注释符是否去掉。 a. 目前大多数php的open source都是用php4写的,为了兼容以前的php版本,有时需要将register_long_arrays打开,否则$HTTP_GET_VARS和$HTTP_POST_VARS等变量将无法使用,会出现一些莫名其妙的问题。 a. 另外,在装完php5后最好确认一下/etc/apache2/mods-enabled/下是否有链接: php5.load -> /etc/apache2/mods-available/php5.load 加固PHP,以增强安全性。注意,下面的安全性要因情况而定,所以我已经把它们的功能写清楚了,如果有问题的话,看看是否由于下面哪种限制条件所造成,可相应将其注释掉。那么让我们开始吧,我们将再次编辑/etc/php5/apache2/php.ini文件,之所以没有一次改完,主要是为了给大家一个清晰的思路。 #打开安全模式,打开他的好处就是PHP文件只能访问所有者和PHP文件所有着一样的文件,即使在chroot环境下也无法访问jail 中属主不一样的文件,类似于php shell这样的后门就没用武之地了哦,phpshell是很流行的php后门,他可以执行系统命令,就象他的名字一样,和shell很接近。 safe_mode = On #清注意,安全模式打开一个会导致judge online一类有调用外部程序的php无法工作。 #下面的设置就限制了fopen(), [...]

PHP中GBK和UTF8编码处理

一、编码范围 1. GBK (GB2312/GB18030) \x00-\xff GBK双字节编码范围 \x20-\x7f ASCII \xa1-\xff 中文 \x80-\xff 中文 2. UTF-8 (Unicode) \u4e00-\u9fa5 (中文) \x3130-\x318F (韩文 \xAC00-\xD7A3 (韩文) \u0800-\u4e00 (日文) ps: 韩文是大于[\u9fa5]的字符 正则例子: preg_replace(“/([\x80-\xff])/”,””,$str); preg_replace(“/([u4e00-u9fa5])/”,””,$str); 二、代码例子

ubuntu8.10 下安装eAccelerator

1.先安装LAMP环境 apache2.2-common PHP5 php5-mysql 请参考此文:http://tienet.blogspot.com/2008/12/ubuntuphp.html 2.安装以下必须的包 autoconf automake libtool m4 php5-dev make 3. 下载eAccelerator 去eAccelerator官方网站http://eaccelerator.net/下载最新版本的ea, 这里下载的是eaccelerator-0.9.5.3这个版本。 4. 编译安装eAccelerator 解压下载下来的包,并在终端下转到解压后的目录, 接下来执行: export PHP_PREFIX=”/usr” sudo $PHP_PREFIX/bin/phpize ./configure \ –enable-eaccelerator=shared \ –with-php-config=$PHP_PREFIX/bin/php-config sudo make sudo make install 到此,安装完成! 5. 配置php.ini文件 /etc/php5/apache2/php.ini 在php.ini文件里加入: zend_extension=”/usr/lib/php5/20060613+lfs/eaccelerator.so”(20060613

php命令行

1.本机执行php 1.1 安装完php后可以直接执行php脚本。如安装到“C:\Program Files\PHP” 1.2 若环境变量path加上了“C:\Program Files\PHP”目录,那在命令行直接打php即可运行。 1.3 方式一:在命令行直接执行“php”,然后输入 < ?php echo "Hello World"; ?> Ctrl+Z 回车 执行后回显“Hello World”。 1.4 方式二:编写php文件,如“a.php”,内容为 < ?php echo phpinfo(); ?> 保存后在命令行执行 php a.php,会显示php全部情况包括加载模块等。 1.5 方式三:在命令行执行简单代码。 php -r “echo ‘Hello World’;” 执行后会显示“Hello World”。注意代码要用引号括起来,代码里的引号和外面的引号不要有冲突。 1.6 在什么情况下要用php命令行(即CLI): 1.6.1 定时调用php程序。 1.6.2 其他应用程序如java等使用命令行调用php程序。 1.6.3 编辑工具命令行运行或调试。 1.6.4 查看php版本、环境、源码和其他信息。 1.7 php命令行常用的 1.7.1 php -h php命令行帮助,php命令行的老师 1.7.2 [...]

wikimedia出现的PHP报时区变换警告问题

  wiki系统不能发送确认邮件,请检查您的邮箱地址是否包含非法字符。   邮件传送员回应:It is not safe to rely on the system’s timezone settings. Please use the date.timezone setting, the TZ environment variable or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected ‘UTC’ for ’8.0/no DST’ [...]

PHP做接口中用到调用远程url的几种方法

来源:zhoz 上午终于把IF接口设计好了,加密与解密认证通过客户认定。主要通过三个参数来识别验证。 下面将用到向远程服务器提交参数,并获取结果来处理。

php下载任意指定(如zip/ucm)文件代码

想提供下载但又不想放出指定文件的路径。通常通过php读取文件生成网络流,再输出到页面即产生下载响应。 主要函数:fread(PHP 3, PHP 4, PHP 5) fread — 读取文件(可安全用于二进制文件) 说明 string fread ( int handle, int length ) fread() 从文件指针 handle 读取最多 length 个字节。该函数在读取完 length 个字节数,或到达 EOF 的时候,或(对于网络流)当一个包可用时就会停止读取文件,视乎先碰到哪种情况。 注: 如果只是想将一个文件的内容读入到一个字符串中,用 file_get_contents(),它的性能比上面的代码好得多。

wap取机种信息常用php类

主要功能:取手机号,头信息,UA,手机类型,IP等。

PHP截取中文字符 乱码问题

通常截取字符,主要分为英、数字/中文,就中文来说长度是不一定的,如用strlen输出就会发现,通常一个假名/汉字长度有的是3位,也有2位的情况。这样就不能直接用SubStr来截取,否则可能会出现截取不全的乱码现象。 这里介绍SubStr和新主角mb_substr来处理上面的情况。 通常英文、数字直接就用SubStr没什么说明了。   $monji = "可愛";   // 截取开始 $monji_ii = mb_substr($monji, -1, 1); // 愛 $monji_ka = mb_substr($monji, 0, 1); // 可

一些不常见但很有用的php函数

exec(string $command[,array &$output[,int &$return_var]])  –Execute an external program    string escapeshellarg(string $arg);    string escapeshellcmd(string $command);    void passthru(string $command[,int &$return_va])  –Execute an external program and display raw output

php+ajax实现无刷新表单验证

很多时候,我们在网上注册个人信息,在提交完页面后,总得等待页面刷新来告诉我们注册是否成功,遇到网络差的时候,如果注册了一大串的东西,在经过漫长的 等待页面刷新后,得到的确是“您的用户名已被使用”或XXXXXXX不合法,我想大家的心情一定特别不爽,今天就介绍个AJAX实现页面不刷新注册+实时 检测用户信息的简单注册程序,希望对大家有所帮助。好的,先看注册界面代码:

Windows下的PHP扩展编程

PHP 尽管提供了大量有用的函数,但是在特殊情况下还可能需要进行扩展编程,比如大量的 PECL(PHP Extension Community Library)就是以扩展的形式提供的(动态链接库dll文件),它们比 PEAR 的运行效率要高很多。 PHP 扩展是用 C 或 C++ 编写的,需要编译成动态连接库 dll 文件后在 PHP 环境下注册后才能使用。 编写 PHP 扩展的软件要求: VC++6.0 或 VC++.NET 环境。 PHP 的源代码,需要编译。 如果不愿意编译 PHP 的源代码,可以再下载 PHP 的已经编译成功的二进制代码(就是我们部署 PHP 运行环境的那些文件包)。注意分别下载的源文件包和已编译包,它们的版本必须一致。

Ajax 及其入门基础

Ajax的原理 这个其实要从C/S和B/S的原理说起。Windows操作系统的诞生,为单机通信提供了很大的支持,程序设计也从DOS早期的单任务单用户向网络的分布式应用过度。C/S提供的客户/服务器编程模式为网络应用提供了一个有效的通信手段。浏览器与Web服务器之间的请求/ 服务,就是一个典型的C/S应用。 有人说,怎么是C/S?这应该是B/S呀!其实是这样理解的:浏览器/Web服务器作为我们实现网页发布的一个平台,对于我们在这个平台上开发的应用,我们的应用是由浏览器从Web服务器上下载下来然后展示在浏览器的“容器”里的,我们的应用是B/S模式的。但是浏览器与Web服务器的通信,却是C/S模式的。可以说,B/S模式是建立在C/S模式之上的。 Windows早期的桌面应用程序(包括单机程序和C/S结构的网络应用程序),其界面是调用Windows的API来实现的,后来,出现了VB、Delph(VCL)、VC++(MFC)等应用程序框架,把繁杂的API包装起来,使Windows程序开发难度大大降低、效率大大提高。

PHP多进程并发控制的测试用例

[文章作者:张宴 本文版本:v1.0 最后修改:2007.11.16 转载请注明出处:http://blog.s135.com] 最近遇到一个问题,Linux下的PHP命令行程序作为守护进程,需要从队列文件中读一行数据,通过TCP协议发送给外地的接收服务器,再读下一行数据,再发送。当本地与外地的网络状况不好时,有时候发送一条数据所耗费的时间就较长,累积起来容易造成队列堵塞和延迟。 于是,我准备用该PHP命令行程序生成多个子进程,将串行处理变成并行处理。最简单的方法就是在PHP中用exec()或popen()函数将一个shell命令行推到后台去执行,例如: <?php exec("/bin/sh /opt/zhangyan.sh &"); ?> 最后的&表示将shell脚本推到后台去执行。 但是这样会有一个问题,如果推到后台的进程太多,可能会导致服务器系统资源耗尽而崩溃,所以必须控制进程数量。 我写了一个PHP程序(/opt/zhangyan.php)、一个shell程序(/opt/zhangyan.sh)作为测试用例。 程序的逻辑: 1、设置/opt/zhangyan.php最多允许生成500个子进程; 2、当/opt/zhangyan.php读取到一条数据后,将允许生成的子进程数减1(空闲进程数$p_number=500-1=499),然后将数据交给/opt/zhangyan.sh去后台处理,不等待/opt/zhangyan.sh处理结束,继续读取下一条数据; 3、当允许生成的子进程数减至0时(空闲进程数$p_number=0),/opt/zhangyan.php会等待1秒钟,然后检查后台还有多少个/opt/zhangyan.sh子进程尚未处理结束; 4、如果1秒钟之后/opt/zhangyan.php发现后台的/opt/zhangyan.sh子进程数还是500(空闲进程数$p_number=0),会继续等待1秒钟,如此反复; 5、如果/opt/zhangyan.php发现后台尚未处理结束的/opt/zhangyan.sh子进程数减少到300个了(空闲进程数$p_number=500-300=200),那么/opt/zhangyan.php会再往后台推送200个/opt/zhangyan.sh子进程; /opt/zhangyan.php代码如下: view plaincopy to clipboardprint? <?php   function run($input)   {   global $p_number;   if ($p_number <= 0)       {   $p_number = worker_processes($p_number);       }   $p_number = $p_number – 1;   $out = popen("/bin/sh /opt/zhangyan.sh \"{$input}\" &", "r");       [...]

PHP5 cookie与session

  1、HTTP协议本身是无状态的。    我们上网都要靠HTTP协议传递信息。比如我们在浏览器里键入:www.bokee.com这个网址并回车,你会发现网址会变成:http://www.bokee.com,其原因就是浏览的网页是基于http协议的。http协议无法记录用户经常上哪些网站,有什么爱好,也无法记录用户的ID帐号和密码。这就是所谓的HTTP协议无状态。HTTP协议本身是无状态的,这与HTTP协议本来的目的是相符的,客户端只需要简单的向服务器请求下载某些文件,无论是客户端还是服务器都没有必要纪录彼此过去的行为,每一次请求之间都是独立的,好比一个顾客和一个自动售货机或者一个普通的(非会员制)大卖场之间的关系一样,你认得它们,它们则肯定认不得你。 2、怎样理解cookie和session?    由于cookie和session关系密切,这里我们一并介绍。    打个比方:在河南时,我常到一家熟食店买馋嘴鸭,该店老板为了促进销售,特发布“每购满10只即可免费赠送一只”的优惠措施。除了家里有什么红白喜事要飨客之外,应该不会有人一次性购买10只烤鸭吧?所以老板得想个法子来记录顾客的消费数量,这里总共有三种方案:

PHP4 开发的代码迁移到 PHP5

使用 PHP V5 的新语言特性,可以明显地提高代码的可维护性和可靠性。通过阅读本文,您将了解如何利用这些新特性将用 PHP V4 开发的代码迁移到 PHP V5.

用PHP5的DirectoryIterators递归扫描目录

    PHP5中增加了Iterator,一组有助于导航和处理等级数据结构的现成接口,这是PHP5最有趣的新特性之一。   这些Iterator显著减少了处理XML文档树或文件集合所需的代码。PHP5中使用大量Iterator,包括ArrayIterator、 CachingIterator、LimitIterator、RecursiveIterator、SimpleXMLIterator和 DirectoryIterator。   通过DirectoryIterator可以迅速有效地对目录中的文件进行处理。在编码过程中稍微增加一些创造力,DirectoryIterator还可用于递归处理嵌套式目录树。这两个任务只需使用几行代码就可以完成,比“标准”处理方法有了显著提高。   处理单级目录   首先我们从简单的任务着手:处理一个单级目录。输入(或复制)以下代码(列表A),修改目录路径以反映当地配置:   列表A   <?php$it = new DirectoryIterator(“/tmp/mystuff”);foreach($it as $file) {if (!$it->isDot()) {echo $file . “n”;}}?>在浏览器中查看这段代码的输出结果,你会在指定目录中看到一个文件列表。这一切是如何发生的呢?DirectoryIterator提供一个预先确 定的接口来重述一个目录的内容;示例目标目录的位置后,就可以把它当作一个标准的PHP数组来处理,每个元素代表目录中的一个文件。注意它使用isDot ()方法分别过滤掉“.”和“..”目录。   处理嵌套式目录树   递归处理一个嵌套式目录树几乎同样简单。在这种情况下,DirectoryIterator需要检查它在单级目录中遇到的每一个对象,确定其是一个文件还是目录。如果是一个目录,就更深入一级检验下一级的内容。这听起来似乎相当复杂,在过去一般都需要15行以上的代码。   但是,使用PHP5,你只需要两个新的Iterator:RecursiveIterator和RecursiveIteratorIterator,它们组合了所有上述功能。见列表B:   列表B   <?php$it = new RecursiveDirectoryIterator(“/tmp”);foreach(new RecursiveIteratorIterator($it) as $file) {echo $file . “n”;}?>这时,输入结果将列出起始目录下的所有文件和目录。不必说,如果需要处理某个特定目录级下的所有文件——例如,递归压缩一个目录树;或修改一系列嵌套文件的组/所有者许可时——使用这种递归内置接口就非常方便。   现实应用:打印一个目录树   打印图形目录树是目录递归的一个常见应用。利用Iterator处理这个任务十分简单,因为Iterator类文档中包含一个专门为这个应用而编写 的实例类。DirectoryTreeIterator(感谢Marcus Boerger)为前面讨论的RecursiveIteratorIterator提供了其它改进,特别是在树结构中代表深度和位置的ASCII标记。   列表C说明了DirectoryTreeIterator的用法。   列表C   <?php$it = new DirectoryTreeIterator(“/tmp/cookbook/”);foreach($it as $path) {echo $path . “n”;}?>以下是你看到的一部分输出结果:   |-ch01| [...]

PHP使用GIFEncoder生成动态gif滚动字幕

一个滚动字幕。要求用php生成gif图片。所以上网找了GIFEncoder这个类库。确实很好用,但是,应用过程中也出现了一些小问题,现在放在这里,以供参考,少走弯路。 <?php Class GIFEncoder { var $GIF = “GIF89a”;                /* GIF header 6 bytes        */ var $VER = “GIFEncoder V2.06″;        /* Encoder version                */ var $BUF = Array ( ); var $LOP =  0; var $DIS =  2; var $COL = -1; var $IMG = -1; var $ERR = Array ( ‘ERR00′ =>”Does not supported [...]

如何将syslogng的日志写入MySQL数据库

在 使用syslog-ng搭建日志服务器 中已经讲了如何将syslog-ng配置为中心日志服务器,下面介绍如何将syslogng的日志写入mysql数据库, 系统:Gentoo-2007 1、修改/etc/syslog-ng/syslog-ng.conf,添加 source s_remote {         udp(ip(0.0.0.0) port(514));         }; destination r_mysql {         program(“/usr/bin/mysql -usyslogadmin -psyslogadmin syslog log { source(s_remote); destination(r_mysql); }; 2、建立mysql.pipe文件按 #mkfifo /var/log/mysql.pipe 3、重新启动syslog-ng #/etc/init.d/syslog-ng restart 这种方法如果结合phpsyslogng一起使用,就可以在浏览器中对日志进行进一步的过滤和查看,非常方便,官方网站地址是: http://code.google.com/p/php-syslog-ng/ http://nms.gdd.net/index.php/PHP-Syslog-NG

Drupal的性能问题

在本系列文章告一段落的时候,我们看到的是PHP的局限性。热爱PHP的人们可能会对此觉得沮丧。但是,这并无损于PHP作为一门优秀语言的声誉。尺有所短,寸有所长,对于我们熟悉和喜爱的工具,我们更应该了解它们的局限,这也有利于我们更有效地使用它们。

PHP发送UTF-8编码中文邮件标题乱码的解决

来源地址: http://www.williamlong.info/info/archives/189.html   当我们使用下面的PHP语句发送中文电子邮件的时候,会发现邮件的标题是乱码,而邮件正文却是正确的,如何才能使得邮件标题不是乱码呢?   $subject = stripslashes($the_post['Title']);   $headers = “MIME-Version: 1.0\r\n”;   $headers .= “Content-type: text/plain; charset=utf-8\r\n”;   $headers .= “Content-Transfer-Encoding: 8bit\r\n”;   $message = stripslashes(strip_tags($the_post['Content']));   mail($to, $subject, $message, $headers);   先用函数base64_encode() — 使用 MIME base64 对数据进行编码   标题字符串前加编码类型例如: =?UTF-8?B?   标题字符串后加:?=   例如:   $subject = “=?UTF-8?B?”.base64_encode($subject).”?=”;   将上面一句添加到代码之中,这样,发送的中文邮件标题就不是乱码了。

PHP连接mysql网页出现乱码

有的时候PHP连接mysql数据库里网页会出现乱码情况,一般的MySQL 字符集: UTF-8 Unicode (utf8),MySQL 连接校对相应的也就是utf8_general_ci,网站使用utf8编码的好处也就是不管世界各地的人谁访问网站,一般都不会出现乱码的情况,但如果在phpmyadmin上面新建数据库的时候没有选择utf8_general_ci,数据库默认是latin1_swedish_ci,所以在首先在phpmyadmin里面看到的中文录入信息就是乱码,所以一定要把数据库的信息默认改成utf8_general_ci,当php连接的时候,可以在数据库连接文件里设定总的网页默认语言, mysql_query(“set names ‘utf8′”),也可以在分页里设置mysql_query(“set names ‘utf8′”),但必须是在数据库连接后使用,$conn = mysql_connect(“localhost”,”root”,””);mysql_query(“set names ‘utf8″);//这就是指定数据库字符集,一般放在连接数据库后面就可以了。 页面申明编码:在HTML代码HEAD里面,可以用<meta http-equiv=”Content-Type” content=”text/html; charset=”XXX” />来告诉浏览器网页采用了什么编码,目前中文网站开发中主要用的是GB2312和UTF-8两种编码。

PHP5 之 __set()和__get() 函数

class TestMagicFun{      public $name = ”;      public $email = ”; } $testObj = new TestMagicFun(); $testObj->name = ‘simple’; $testObj->email = ‘abc@gmail.com’; $testObj->address = ‘earth china’; 下面的代码在php4,php5中运行都无问题,而在实际的工作中,我们可能不想使用者对未声明的属性进行赋值,此时PHP4就无能为力了,还好在PHP5中有__set(),__get()这样的魔法方法可以用。 我们可以对上面的类进行一下改造 class TestMagicFun{      public $name = ”;      public $email = ”;            private function __set($property,$value)      {          // 在此处做一些特殊的处理          print “not defined {$property}”;      }            private function __get($property)      {            // 在此处做一些特殊的处理          print “not defined {$property}”;      } } 然后再初始化一个对像 $testObj = new TestMagicFun(); $testObj->name = ‘simple’; $testObj->email = ‘abc@gmail.com’; $testObj->address = ‘earth china’;



赞助商

文章索引模板

好友推荐链接

强力推荐链接

分类目录

   

统计信息

Translator

Chinese (Simplified) flagItalian flagKorean flagChinese (Traditional) flagPortuguese flagEnglish flagGerman flagFrench flagSpanish flagJapanese flagArabic flagRussian flagGreek flagDutch flagBulgarian flagCzech flag
Croatian flagDanish flagFinnish flagPolish flagSwedish flagNorwegian flag          

标签

专利战 世界 中国 为什么 介绍 使用 公司 分析 利用 功能 原谅我红尘颠倒 发现 天涯 如何 实现 工具 慕容雪村 技术 插件 搜索引擎 支持 数据库 文件 方式 时间 服务器 用户 简单 系统 网站 美国 解决 谁的心不曾柔软 进行 部分 问题 AJAX blog Google LAN Linux MySQL PHP plugin WordPress

热门浏览