中山php|最优网络 :中山做网站 中山php建站
最优良人
Category Page for: 后端程序
二级目录下,htaccess做301重定向,把ip地址转向域名
2011/08/26 at 15:14 » Comments (221)
因为网站是放在独立IP的主机上,百度和谷歌直接通过ip地址收录了网站许多页面,包括二级目录下的页面,因为子目录下也存在htaccess文件,有自己的规则,所以根目录的301跳转规则对子目录无效,需要在子目录下再做301重定向。 发现子目录与根目录不同的地方是访问地址后面有没有加斜杠所请求的地址有一点点不同,下面是规则: RewriteBase /news RewriteCond %{HTTP_HOST} ^zui88.com [NC] RewriteRule com(.*)$ http://www.zui88.com$1 [L,R=301] #不加斜杠请求的地址是/wwwroot/zui88.com/news/ RewriteCond %{HTTP_HOST} ^zui88.com [NC] RewriteRule (.*)$ http://www.zui88.com/news/$1 [L,R=301] RewriteCond %{HTTP_HOST} ^124.173.133.154 [NC] RewriteRule com(.*)$ http://www.zui88.com$1 [L,R=301] RewriteCond %{HTTP_HOST} ^124.173.133.154 [NC] RewriteRule (.*)$ http://www.zui88.com/news/$1 [L,R=301] more »什么是php反射机制以及利用php反射机制实现可插拔可扩展的插件架构
2011/08/26 at 00:06 » Comments (406)
反射是什么? 它是指在PHP运行状态中,扩展分析PHP程序,导出或提取出关于类、方法、属性、参数等的详细信息,包括注释。这种动态获取的信息以及动态调用对象的方法的功能称为反射API。 反射是操纵面向对象范型中元模型的API,其功能十分强大,可帮助我们构建复杂,可扩展的应用。其用途如:自动加载插件,自动生成文档,甚至可用来扩充PHP语言。php反射api由若干类组成,可帮助我们用来访问程序的元数据或者同相关的注释交互。借助反射我们可以获取诸如类实现了那些方法,创建一个类的实例(不同于用new创建),调用一个方法(也不同于常规调用),传递参数,动态调用类的静态方法。 * ** 反射api是php内建的oop技术扩展,包括一些类,异常和接口,综合使用他们可用来帮助我们分析其它类,接口,方法,属性,方法和扩展。这些oop扩展被称为反射,位于php源码/ext/reflection目录下。 可以使用反射api自省反射api本身(这可能就是反射最初的意思,自己"看"自己): <?php Reflection::export(new ReflectionExtension('reflection')); ?> 几乎所有的反射api都实现了reflector接口,所有实现该接口的类都有一个export方法,该方法打印出参数对象的相关信息。 使用get_declared_classes()获取所有php内置类,get_declared_interfaces(); get_defined_functions(); get_defined_vars(); get_defined_constants();可获取php接口,方法,变量,常量信息。 ** *** 反射初探: <?php //定义一个自定义类 class MyTestClass{ public function testFunc($para0='defaultValue0'){ } } //接下来反射它 foreach(get_declared_classes() as $class){ //实例化一个反射类 ...more »php强制下载文件,避免文件或者图片直接在浏览器打开
2011/08/25 at 15:08 » Comments (10)
以下代码是FLEAPHP框架自带的文件下载助手类 /** * FLEA_Helper_SendFile 类用于向浏览器发送文件 * * 利用 FLEA_Helper_SendFile,应用程序可以将重要的文件保存在 * 浏览器无法访问的位置。然后通过程序将文件内容发送给浏览器。 * * @package Core * @author 起源科技 (www.qeeyuan.com) * @version 1.0 */ class FLEA_Helper_SendFile { /** ...more »php逐条输出结果到浏览器,实现实时提醒和无刷新提示
2011/08/25 at 14:50 » Comments (280)
php实现字符串逐条输出的原理是利用flush();ob_flush();函数刷新输出缓冲 ob_end_clean(); //清除输出缓存并且关闭缓存 echo str_pad(' ',256);//输出256字节空格(在ie浏览器下要接受大于256个字节才会输出显示 ) for($i=0;$i<5;$i++){ echo '<br/>abc___'.$i; flush(); ob_flush(); sleep(1); } 该方法在opera下不可用,因为opera浏览器在不遇到一个html标签之前是不输出内容的 more ».htaccess排除真实目录和文件规则
2011/08/25 at 12:21 » Comments (24)
.htaccess排除真实目录和文件规则 RewriteEngine on RewriteBase /html RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L] #RewriteRule ^.*/(sysadm/.+)$ $1/index.php [L] more »php在windows主机或虚拟空间利用socket在线发送邮件
2011/08/24 at 23:53 » Comments (2,688)
在linux虚拟主机下一般可以利用php的mail函数直接发邮件 bool mail ( string $to , string $subject , string $message [, string $additional_headers [, string $additional_parameters ]] ) 但是在windows虚拟主机下则不能直接使用mail函数,可以通过socket了,采用邮箱的smtp服务在线发送邮件(现在的163免费邮箱一注册就可以免费使用这个服务,并且默认开通的),比较成熟的在线发送邮件类有php_mailer,功能很强大,不过下面介绍的是一个比较简单的socket邮件发送类,应付一般的需求足够了。 使用方法是: require_once (dirname(__FILE__).'/email.class.php');//该类的代码附在文章后面 //########################################## $smtpserver = "smtp.163.com";//SMTP服务器 $smtpserverport =25;//SMTP服务器端口 $smtpusermail = "XXX@163.com";//SMTP服务器的用户邮箱 $smtpemailto = "XXXXX@qq.com";//发送给谁 $smtpuser = ...more »htaccess在根目录和子目录下的执行顺序
2011/08/23 at 14:13 » Comments (81)
如果在根目录和子目录下都存在htaccess文件,默认根目录下htaccess的规则是不会被继承的,如果这些配置需要影响到子目录,需要手动写上"RewriteOptions inherit"才能继承父配置,参考上一篇 htaccess的用法 。 所以如果子目录也要用到根目录的配置规则,最好是重新定义,因为如果单纯的继承的话,根目录htaccess里面的某些规则的路径可能已经不适用子目录。 more »htaccess,apache下分布式配置文件的配置选项和flag标签
2011/08/23 at 14:06 » Comments (100)
以下指命令的作用域都是.htaccess RewriteEngine On|Off RewriteEngine 可用On 或者 Off 打开或关闭rewrite功能。 rewrite configurations 不会继承,所以你得给每个你想用 rewrite功能的virtual host加上这个指令。 RewriteBase URL-path RewriteBase指令显式地设置了目录级重写的基准URL。在下文中,你可以看见RewriteRule可以用于目录级的配置文件中 (.htaccess)并在局部范围内起作用,即规则实际处理的只是剥离了本地路径前缀的一部分。处理结束后,这个路径会被自动地附着回去。默认值是"RewriteBase physical-directory-path"。 在对一个新的URL进行替换时,此模块必须把这个URL重新注入到服务器处理中。为此,它必须知道其对应的URL前缀或者说URL基准。通常,此前缀就是对应的文件路径。但是,大多数网站URL不是直接对应于其物理文件路径的,因而一般不能做这样的假定! 所以在这种情况下,就必须用RewriteBase指令来指定正确的URL前缀。 如果你的网站服务器URL不是与物理文件路径直接对应的,而又需要使用RewriteBase指令,则必须在每个对应的.htaccess文件中指定RewriteRule 。 RewriteCond TestString CondPattern RewriteCond指令定义了一个规则的条件,即在一个RewriteRule指令之前有一个或多个RewriteCond指令。条件之后的重写规则仅在当前URI与pattern匹配并且符合这些条件的时候才会起作用。 Notice:All of these tests can also be prefixed by an exclamation mark ('!') to ...more »PHP定界符EOT的用法
2011/08/20 at 14:54 » Comments (120)
定界符: 另一种给字符串定界的方法使用定界符语法("<<<")。应该在 <<< 之后提供一个标识符,然后是字符串,然后是同样的标识符结束字符串。 结束标识符必须从行的第一列开始。同样,标识符也必须遵循 PHP 中其它任何标签的命名规则:只能包含字母数字下划线,而且必须以下划线或非数字字符开始。 php 中(<<<eot)的用法 有时候我们需要在php输出比较复杂的html文本,如果使用双引号的话,文本里面有双引号的 例: <?php while($rs=$db->fetch_array($news)){ echo <<<EOT <li> <a href="?{$rs[id]}">{$rs[title]}</a><img src="images/new.gif" alt=""><span>[{$rs[date]}]</span></li> EOT; //注意,此处的EOT;必须在当前行的最前,其前面不允许有任何字符 ?> 从上面的例子可以看出<<<eot为开始标识,结束为eot; 中间引用变量则就为{变量} 这种方法通常用在生成静态度页面时,可以把此代码写在静态文件中,然后然后用来调用即可 定界符 给字符串定界的方法使用定界符语法("<<<")。应该在 <<< 之后提供一个标识符,然后是字符串,然后是同样的标识符结束字符串。 结束标识符必须从行的第一列开始。同样,标识符也必须遵循 PHP 中其它任何标签的命名规则:只能包含字母数字下划线,而且必须以下划线或非数字字符开始。 举个例子: <?php $str = <<<EOD Example of string spanning multiple lines using heredoc syntax. EOD; ?> 但要注意的是: 结束标识符所在的行不能包含任何其它字符,可能除了一个分号(;)之外。这尤其意味着该标识符不能被缩进,而且在分号之前和之后都不能有任何空格或制表符。同样重要的是要意识到在结束标识符之前的第一个字符必须是你的操作系统中定义的换行符。例如在 Macintosh 系统中是 \r。 如果破坏了这条规则使得结束标识符不"干净",则它不会被视为结束标识符,PHP 将继续寻找下去。如果在这种情况下找不到合适的结束标识符,将会导致一个在脚本最后一行出现的语法错误。 如下: print ...more »smarty使用date函数
2011/08/19 at 18:04 » Comments (5)
smarty在模板上可以直接使用php自带的函数,甚至可以使用自定义的函数,使用的方法是: 模板中调用变量时,当只有一个参数是,就直接{$str1|函数名},当有函数有两个参数时,{第一个参数|函数名:第二个参数},当有三个参数时,{第一个参数|函数名:第二个参数:第三个参数},,当有4,5,,,参数时,以此类推。 smarty使用date函数的用法是{{'Y-m-d'|date:$var}} more »