我们使用的是哪个 PHP 版本? 带有 Suhosin-补丁的PHP 5.3.10-1ubuntu3.6, 安装于 Ubuntu 12.04 LTS. PHP如同是网络世界的百年老龟。它的外壳上刻有一个丰富的,令人费解的,粗糙的历史。在一个共享主机的环境下,它的配置可能会限制你能做什么事情。 为了保留一丝明智,我们需要只专注于一个版本的PHP。截至2013年4月30,该版本是 带有Suhosin补丁的PHP5.3.10-1ubuntu3.6 。如果你使用apt-get从一个Ubuntu12.04 LTS服务器来安装PHP的话,你所得到的版本就是这个。换句话说,许多人在默认情况下已经很明智地使用了它。 您可能会发现本文这些解决方案能工作于不同或更旧版本的PHP。如果是这样的话,就要由你来研究在这些旧版本中的细微错误或安全问题的影响了。 保存密码 使用 phpass 库计算密码的哈希值进行比较。 用 phpass 0.3 进行的测试。 散列化是在把用户密码保存进数据库之前对其进行保护的标准方法。许多常见的散列算法,如MD5,乃至SHA1,用于存储密码都是不安全的,因为黑客可以使用这些散列算法轻松破解密码。 要散列化密码最安全的方法是使用bcrypt算法。开源的phpass 库用一个易于使用的类来提供这个功能。 例子: view source print? 01 <?php 02 // 包含phpass库 03 require_once('phpass-0.3/PasswordHash.php'); 04 05 // 初始化散列器为不可移植(这样更安全) 06 $hasher= newPasswordHash(8, false); 07 08 // 计算密码哈希值。$hashedPassword 将会是一长为60个字符的字符串. 09 $hashedPassword= $hasher->HashPassword('my super cool password'); 10 11 // 你现在可以安全地保存$hashedPassword到数据库中! 12 13 // 通过比较用户输入内容(产生的哈希值)和我们之前计算出的哈希值,来判断用户是否输入了正确的密码 14 $hasher->CheckPassword('the wrong password', $hashedPassword); // 返回假 15 16 $hasher->CheckPassword('my super cool password', $hashedPassword); // 返回真 17 ?> 陷阱 很多来源会建议你在计算密码的哈希值之前先给密码加点“作料”。这是个好主意,phpass已经利用HashPassword() 函数中的一部分代码来为你给密码加了作料。 这就意味着你并不需要自己再亲自做这个了。 进一步阅读 […]
View Details一、apacheapache 的 httpd.conf 有两个配置可以控制是否显示服务器信息给用户。ServerTokensServerSignature默认条件下会把apache版本 系统 模块都显示出来 (HTTP 返回头)设置为:ServerTokens ProductOnlyServerSignature Off就隐藏Apache的Apache Version信息。还有如果列举目录的话 会显示域名信息(文件列表正文)如果不想要就可以调这两个参数ServerTokensServerSignatureServerSignature On|Off|EmailServerTokens Minimal|ProductOnly|OS|FullServerTokens Prod[uctOnly]Server sends (e.g.): Server: ApacheServerTokens Min[imal]Server sends (e.g.): Server: Apache/1.3.0ServerTokens OSServer sends (e.g.): Server: Apache/1.3.0 (Unix)ServerTokens Full (or not specified)ServerSignature控制由系统生成的页面(错误信息,mod_proxy ftp directory listing等等)的页脚中如何显示信息。可在全局设置文件中控制,或是通过.htaccess文件控制默认为”off”(ServerSignature Off),有些Linux发行版本可能会打开这个阀门,比如Debian在默认的虚拟主机上默认将这个阀门设置为开放全局阀门的阀值会被虚拟主机或目录单位的配置文件中的阀值所覆盖,所以,必须确保这样的事情不应该发生可用的阀值为下面所示:Off (default): 不输出任何页脚信息 (如同Apache1.2以及更旧版本,用于迷惑)On:输出一行关于版本号以及处于运行中的虚拟主机的ServerName (2.0.44之后的版本,由ServerTokens负责是否输出版本号)EMail: 创建一个发送给ServerAdmin的”mailto”二、隐藏 PHP 版本php.iniexpose_php On改成expose_php Off重启apache后,php版本在http头中隐藏了。三、ServerTokens 指令说明: 配置服务器HTTP回应头语法: ServerTokens Major|Minor|Minimal|ProductOnly|OS|Full默认值: ServerTokens Full上下文: 服务器配置状态: 核心模块: core此指令控制了Server回送给客户端的回应头域是否包含关于服务器OS类型和编译进的模块描述信息。ServerTokens ProductOnly服务器会发送(比如说):Server:ApacheServerTokens Major服务器会发送(比如说):Server:Apache/2ServerTokens Minor服务器会发送(比如说):Server:Apache/2.0ServerTokens Min[imal]服务器会发送(比如说):Server:Apache/2.0.41ServerTokens OS服务器会发送(比如说):Server: Apache/2.0.41 (Unix)ServerTokens Full (or not specified)服务器会发送(比如说):Server: Apache/2.0.41 (Unix) PHP/4.2.2 MyMod/1.2此设置将施用与整个服务器,而且不能在虚拟主机的管理层次上予以启用或禁用。ServerSignature 指令说明: 配置服务器生成页面的页脚语法: ServerSignature On|Off|EMail默认值: ServerSignature Off上下文: 服务器配置, 虚拟主机, 目录, .htaccess覆盖项: All状态: 核心模块: coreServerSignature指令允许您配置服务器端生 成文档的页脚(错误信息、mod_proxy的ftp目录列表、mod_info的输出)。您启用这个页脚的原因主要在于处于一个代理服务器链中的时候,用户基本无法辨识出究竟是链中的哪个服务器真正产生了返回的错误信息。默认的Off设定没有错误行(这样便与Apache 1.2及更旧版本兼容)。采用On会简单的增加一行关于服务器版本和正在伺服的虚拟主机的ServerName,而EMail设置会如文档中说明的那样额外创建一个指向ServerAdmin的”mailto:”部分。 转自:http://www.douban.com/note/243308080/
View Details方法一:在PHP里Cookie的使用是有一些限制的。1、使用setcookie必须在<html>标签之前2、使用setcookie之前,不可以使用echo输入内容3、直到网页被加载完后,cookie才会出现4、setcookie必须放到任何资料输出浏览器前,才送出…..由于上面的限制,在使用setcookie()函数时,学会遇到 "Undefined index"、"Cannot modify header information – headers already sent by"…等问题,解决办法是在输出内容之前,产生cookie,可以在程序的最上方加入函数 ob_start();ob_start :打开输出缓冲区函数格式:void ob_start(void)说明:当缓冲区激活时,所有来自PHP程序的非文件头信息均不会发送,而是保存在内部缓冲区。为了输出缓冲区的内容,可以使用ob_end_flush()或flush()输出缓冲区的内容。方法二:解 决Warning: Cannot modify header information – headers already sent by …… 前几天装了个php的大头贴系统测试,发现报错Warning: Cannot modify header information – headers already sent by ……今天又装openads,还是出现这个问题。怒了。上网找了半天,有人说要在文件开头写上ob_start();失败。后来打开 php.ini 然后把 output_buffering 设为 on 。重起appache,OK。看来这才是解决办法。特别注意:(我就是看了这个才解决问题的)如果使用utf-8编码,一定要去掉UTF-8中的BOM,这都是因为utf-8编码文件含有的bom原因,而php4,5都是不支持bom的。去掉bom,可以用Notepad++打开转换一下。(我就是看了这个才解决问题的)用PHP的ob_start(); 控制您的浏览器cache 。 http://www.wangzhanxiugai.com/article-46.html
View DetailsIIS配置PHP5.3配置完成后—FastCGI Error14001 (0x800736b1)___解决方法2010-12-23 0:41 服务器环境: PHP版本:php-5.3.0-Win32-VC9-x86.zip WIN2003 IIS6 按照前一篇的教程[IIS上安装PHP5.3的方法(教程) ]安装PHP 5.3 安装好后还是提示如下错误: FastCGI ErrorThe FastCGI Handler was unable to process the request. ——————————————————————————-- Error Details: Error Number: 14001 (0x800736b1). Error Description: 由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题。 HTTP Error 500 – Server Error.Internet Information Services (IIS) 发生此错误的关键原因在于没有安装VC9运行库 即VISUAL C++ 2008 Microsoft Visual C++ 2008 Redistributable Package (x86)下载地址: http://www.microsoft.com/downloads/details.aspx?FamilyID=9B2DA534-3E03-4391-8A4D-074B9F2BC1BF&displaylang=zh-cn 安装后即能正常使用了. 相关日志JTBC(php版):FLASH幻灯片完美调用方法如何阻止putty变成inactiveJTBC(php版):折腾了我三天的问题终于解决了,一个字“爽”!JTBC(php版):错误Deprecated: Function split() is deprecated in解决方法PHP:错误 Deprecated: Function split() is deprecated in … 解决办法 转自:http://hi.baidu.com/taotaoi/item/064515d8e4cb4de854347f93
View DetailsSmarty是一个使用PHP写出来的模板引擎,是目前业界最著名的PHP模板引擎之一。它分离了逻辑代码和外在的内容,提供了一种易于管理和使用的方法,用来将原本与HTML代码混杂在一起PHP代码逻辑分离。简单的讲,目的就是要使PHP程序员同前端人员分离,使程序员改变程序的逻辑内容不会影响到前端人员的页面设计,前端人员重新修改页面不会影响到程序的程序逻辑,这在多人合作的项目中显的尤为重要。 定义 如何使我的PHP脚本从设计中独立出来?这无疑地是在PHP邮件列表上所提问的最多的问题之一。虽然PHP被标榜为“HTML嵌入式语言”,在写过许多PHP和HTML混合式的工程之后,我产生了一个分离表单和内容的想法。而且,在许多公司里规划设计者的角色和程序设计者是分开的。于是,这样的一个模板解决方案产生了…… 例如在一个公司,一个应用程序的开发流程如下:在提交计划文档之后,界面设计者[美工]制作了网站的外观模型,然后把它交给后台程序员。程序员使用PHP实现商业逻辑,同时使用外观模型做成基本架构。然后工程被返回到HTML页面设计者继续完善。就这样工程可能在后台程序员和页面设计者之间来来回回好几次。由于后台程序员不喜欢干预任何有关HTML标签,同时也不需要美工们和PHP代码混在一起;美工设计者只需要配置文件,动态区块和其他的界面部分,不必要去接触那些错综复杂的PHP代码。因此,这时候有一个很好的模板支持就显得很重要了。 纵观现今存在的许多PHP模板解决方案(比如PHPLIB),大多数都只是提供了用模板取代变量和将动态区块的功能有限的格式化的基本方法。但是我们的需求比这个要高的多。我们完全不想要PHP程序员去设计HTML页面,可是这又是不可避免的。例如:如果美工想要在动态区块之间交替不同的背景颜色,他就可能得和程序员预先说好。同样,美工们也应该有自己对于页面设计的配置文件,这同样可以通过变量把他们拉到模板里边去 优点 1. 速度:采用Smarty编写的程序可以获得最大速度的提高,这一点是相对于其它的模板引擎技术而言的。 2. 编译型:采用Smarty编写的程序在运行时要编译成一个非模板技术的PHP文件,这个文件采用了PHP与HTML混合的方式,在下一次访问模板时将WEB请求直接转换到这个文件中,而不再进行模板重新编译(在源程序没有改动的情况下) 3. 缓存技术:Smarty选用的一种缓存技术,它可以将用户最终看到的HTML文件缓存成一个静态的HTML页,当设定Smarty的cache属性为true时,在Smarty设定的cachetime期内将用户的WEB请求直接转换到这个静态的HTML文件中来,这相当于调用一个静态的HTML文件。 4. 插件技术:Smarty可以自定义插件。插件实际就是一些自定义的函数。 5. 模板中可以使用if/elseif/else/endif。在模板文件使用判断语句可以非常方便的对模板进行格式重排。 不适合使用Smarty的地方 需要实时更新的内容。例如像股票显示,它需要经常对数据进行更新,这类型的程序使用smarty会使模板处理速度变慢。 小项目。小项目因为项目简单而美工与程序员兼于一人的项目,使用Smarty会在一定程度上丧失PHP开发迅速的优点。 (PS:不过为了整个项目的规范,请大家尝试去使用模板引擎。其实习惯了,开发速度会更加快,以上是没有用习惯模板引擎的开发者遇到的问题) 诞生过程 早在1999年后期,我们就已经开始为模板引擎写说明文档。在完成这个文档之后,我们开始用C写一个模板引擎,并有希望被包含到PHP里去。在 撞上了许多的技术难题的同时,“什么是模板应该做的,什么不该做”这个问题,也被热烈的讨论着。从这些经验,我们决定应该用PHP将模板引擎写成一个类,让任何觉得合适的人使用它。所以我们写了一个引擎,从此就有了Smarty。(注:这个类以前从来没有公开发表过)。这个类几乎达到了我们所有的要求:常规变量替换,支持包括其他模板,使用配置文件集成设置,嵌入PHP代码,限制'if'语句的作用,还有更多的可以多层嵌套的健壮的动态区块。它用常规表达式做到这一切,于是代码变得相当令人费解。在每次调用的时候,都要去解析那些语法和常规表达式,于是在大型应用的时候,它显然慢了下来。在程序员的眼光看来,最大的问题还是使用PHP脚本建立和处理模板和动态区块的所有必要工作。我们应该如何使他变得更简单? 我们可以想象Smarty应该有怎样的最后表现。我们知道PHP代码如果没有了模板解析的开销将有多快,我们也知道从一般的美工看来PHP语言是多么的“恐怖”,然而这一切可以被一种更简单的模板语法掩饰掉。我们应该怎样把这两种方法的长处结合起来? 于是,Smarty诞生了……
View Details引起此问题的原因:1.数据库已经满了2.相应目录具有可读写的权限。解决方法:1.增大服务器空间。2.清理缓存目录、清空ecs_states表,目的都是为了增大可用空间。3.还有些用户经常备份数据库,这样会造成data目录下的文件占用空间。建议用户备份数据库后将备份文件保存到本地,然后将服务器上的备份文件清除。4.赋予相应的目录为可读写的权限。
View Details上周为Edu 2.0研究中心申请的空间今天批准下来了,所以中午抽空将站点从内网服务器迁移出去了。因为这过程中起了一点波折,所以还是觉得有必要记一笔,以后也可以有个参考。 以下基本是按本人操作的过程,因为之前并没经验,未必是最佳实践,看客自行斟酌,有不准确的,或者有更好的解决方法的,不妨也可以在评论中给提个建议: 1、大约12点收到FTP、MySQL帐户信息,打算开始迁移,所以在微博里放出风声,告知我们的成员在接下来的3个小时内将执行系统迁移,原部署于内网的系统会不可访问; 2、在本地服务器上,使用PHPMyAdmin,选中Drupal使用的数据库,选择export,将数据记录以默认格式导出为tempDrupal.SQL;如果你原先没有配置phpmyadmin,那么使用前需要修改phpmyadmin\libraries\config.default.php文件配置以下基本参数: $cfg['Servers'][$i]['host'] = 'localhost'; $cfg['Servers'][$i]['user'] = 'MYSQL数据库帐号'; $cfg['Servers'][$i]['password'] = 'MYSQL数据库密码'; 3.敲以下命令停止Apache和MySQL服务(具体服务名称以系统中配置的为准),用FTP帐号将原先的Drupal目录中的所有文件传送到目标空间中 net stop apache2.2 net stop mysql 4. 在目标空间上同样上传并配置一个phpmyadmin,登录后选择import,将之前导出的tempDrupal.SQL导入数据库中,这时在phpmyadmin中就可以看到数据库的内部结构了。 5、修改目标空间中的Drupal配置文件,即/sites/default/settings.php。将其中的数据库信息,设置为符合目标空间的值,这些设置语句形如下文。顺便也可以将系统的$base_url 、$cookie_domain均设置为站点的域名,例如“ 'http://et2x.zjnu.edu.cn';”(注意不带“/”) $databases = array ( 'default' => array ( 'default' => array ( 'database' => '数据库名称', 'username' => '数据库用户名', 'password' => '数据库密码', 'host' => 'localhost', 'port' => '', 'driver' => 'mysql', 'prefix' => '', ), ),); 6、到这一步时访问install.php,执行更新脚本,至此,迁移后的空间应该可以显示出来。如果在执行这一脚本时提示没有权限,可以在settings.php中设置 “$update_free_access = TRUE; ”(但执行完后一定要记得改回FALSE或注释掉) 7、不过我在此步登录之后做了一个手欠的事,顺手在主题列表选择另一个主题,结果系统报出一个“failed to open stream: "DrupalTemporaryStreamWrapper::stream_open"”的错误,愣了一会才意识到系统中配置的临时文件夹还没改,在“配置”/“媒体”/“文件系统”中更改了就恢复原先的主题风格了。 […]
View Details1、创建术语表访问 管理 > 结构 > 分类 > 添加词汇表(admin/structure/taxonomy/add)页面,填写词汇表的基本信息并点击保存 2、添加词汇创建完词汇表之后,便可以在术语表管理页面(admin/structure/taxonomy)看到刚才新建的“栏目分类”词汇表 点击词汇表后面的“添加术语”链接,进入添加术语页面,简单创建几个术语,然后对术语层级进行一下调整,得到如词汇结构。 3、添加内容类型字段 访问 管理 > 结构 > 内容类型(admin/structure/types)页面,可以看到系统中存在的内容类型的列表 4、点击“基本页面(page)”所在行的“管理字段”链接,进入“基本内容”内容类型的字段管理页面。在添加新字段处填写以下信息,然后点击“保存”: 标签:栏目分类 字段名称:field_category 存储的数据类型:术语来源 编辑此数据的表单元素:选择列表 在字段设置页面,选择术语来源,然后点击“保存字段设置” 5、选择“术语来源”之后,点击“保存字段设置”之后,会进入到字段详细配置页面,根据自己的需要对字段进行配置,因为这里只是做演示,直接点击页面最下方的“保存设置”即可 6、在返回的字段管理页面中,就可以看到“栏目分类”字段已经成功显示在内容类型的字段列表中了。拖动标签前面的十字架,将栏目分类移动到Title后面 7、创建内容访问 管理 > 信息面板 > 添加内容 > 基本页面(node/add/page)页面,已经可以在标题(Title)字段下方看到“栏目分类”字段了
View Details第一部分 入门 第一章 ■■■ 建立一个drupal7站点 本杰明 梅兰肯 丹 哈基姆扎德 达妮 诺丁著 “好吧,我们能用艰难的方法完成这事,或者我们可以用Drupal的方法完成这事。” 弗莱斯特 玛斯(红茶菌) 本书通过介绍使用Drupal 7创建网站的所有各个方面的内容,将会使你在Drupal的学习中少走弯路:它将会涉及结构和配置,模块开发,前台开发,持续运行项目,以及贡献Drupal的代码,文档,还有社区等等。 在第一章中还有什么比创建一个完整的站点更好的方法开始呢?在27页中,你要每小时从零点走到60英里(或每小时100公里,视情况而定)。在后面的章节中,你要使用Views【视图】的动态页面添加涡轮增压器,主题化赛车的条纹;以及Jquery奖杯的获得者;你还要执行一些商业方面花哨的练习等等。 在整本书中,我们将设法引导你以Drupal的方法做事。从来就没有只有一种方法能达到目地,但是有些方法忽视乃至反对Drupal的产品。相比之 下,Drupal的方式在Drupal的优点基础上是任何方式无法相比的。(第8章讲述了其中的优点之--一个活跃的在课程中能够持续给你提供帮助的社 区。) 在本章中你要创建的这个站点会允许用户轻松地创建和分类内容。方案不是假设的。本书需要一个网站,而你正在创建它!你将要: […]
View DetailsDrupal是使用PHP语言编写的开源内容管理框架(CMF),它由内容管理系统(CMS)和PHP开发框架(Framework)共同构成。连续多年荣获全球最佳CMS大奖,是基于PHP语言最著名的WEB应用程序。截止2011年底,共有13,802位WEB专家参加了Drupal的开发工作;228个国家使用181种语言的729,791位网站设计工作者使用Drupal。著名案例包括:联合国、美国白宫、美国商务部、纽约时报、华纳、迪斯尼、联邦快递、索尼、美国哈佛大学、Ubuntu等。 Drupal诞生于2000年,是一个基于PHP语言编写的开发型CMF(内容管理框架),即:CMS+ framework。其中 framework是指Drupal内核中的功能强大的PHP类库和PHP函数库,以及在此基础上抽象的Drupal API。在网站开发能力上,Drupal和Yii、CodeIgniter、Zend、CakePHP等业界顶级PHP框架同样强大。形象的说,Drupal是一个附带CMS的PHP开发框架。Drupal创始人Dries Buytaert创办的美国Acquia公司的开发人员甚至戏称:Drupal是一个用于开发网站的“操作系统”(webOS),而且此称法被业界广泛接受。很多Drupaler(即Drupal开发者)信奉这样一条真理:既然Drupal已经为我们写好了CMS,那么我们为什么还要选择那些不含有CMS的PHP开发框架呢? Drupal是一套开源系统,全球数以万计的WEB开发专家都在为Drupal技术社区贡献代码。因此,Drupal的代码在安全性、健壮性上具有世界最高水平。这也是美国白宫、美国商务部、法国政府、纽约时报、SONY等著名政府和机构纷纷采用Drupal建设网站的最重要的原因。 Drupal不等于模板建站系统,他们之间有着本质的区别。Drupal的学习曲线相当漫长和陡峭,比PHP难度大得多,要求也高的多。事实上,只有精通XHTML、CSS、Javascript、PHP、MySql的开发人员,经过长期刻苦的学习,才有可能真正的驾驭Drupal,Drupal是给经验丰富的程序员用的,而不是给一般普通用户用的。模板建站系统则不同,模板系统根本不需要任何学习,不需要任何编程知识就可以使用,只适合初级用户搭建一些简单的网站。 Drupal具有业内最强的定制能力和灵活性,这也是造成Drupal学习难度太大的根本原因,这也是没有办法的事情,灵活性的提高必然使复杂程度提高。因此,Drupal技术圈内有一句名言——“Drupal有难度,学习需谨慎。” Drupal强大的定制开发能力,也使其成为众多有技术实力的网站建设公司优先选用的网站开发平台。因为,任何网站建设公司自己开发的系统,在技术上都无法达到Drupal的水平,这正是开源软件的优势所在:全世界的WEB专家都在为Drupal贡献自己的智慧,这是某个公司内部技术团队永远也无法享受到的。是否具有Drupal技术的开发能力也成为鉴别网站建设公司实力的试金石。没有技术实力的公司,根本没有能力驾驭Drupal。 Drupal的架构由三大部分组成:内核、模块、主题。三者通过Hook机制紧密的联系起来。其中,内核部分由世界上多位著名的WEB开发专家组成的团队负责开发和维护。 Drupal综合了强大并可自由配置的功能,能支持从个人博客(PersonalWeblog)到大型社区驱动(Community-Driven)的网站等各种不同应用的网站项目。Drupal最初是由DriesBuytaert所开发的一套社群讨论软件。之后,由于它的灵活的架构,方便的扩展等特性,使得世界上成千上万个程序员加入了Drupal的开发与应用中。今天,它已经发展成为一套强大的系统,很多大型机构都采用基于Drupal的框架建站,包括The Onion,Ain't ItCool News,SpreadFirefox,Ourmedia,KernelTrap,NewsBusters等等。它特别常见于社区主导的网站。 Drupal目前的最高版本是7.9,官方网站下载页面最近释出的版本为7.17,是官方推荐的稳定版。该版本由7.1版修复而来,修正了大量BUG,没有太多新功能,适合学习Drupal的新手安装。下载页面同时提供了Drupal 6.22等旧版本下载。
View Details