Category: Php / Pear / Mysql / Node.js

关于 MySQL LEFT JOIN 你可能需要了解的三点

即使你认为自己已对 MySQL 的 LEFT JOIN 理解深刻,但我敢打赌,这篇文章肯定能让你学会点东西! ON 子句与 WHERE 子句的不同 一种更好地理解带有 WHERE … IS NULL 子句的复杂匹配条件的简单方法 Matching-Conditions 与 Where-conditions 的不同 关于 “A LEFT JOIN B ON 条件表达式” 的一点提醒 ON 条件(“A LEFT JOIN B ON 条件表达式”中的ON)用来决定如何从 B 表中检索数据行。 如果 B 表中没有任何一行数据匹配… Read More

MySQL数据库的FIND_IN_SET函数使用方法详解 (字符串是否被包含)

MySQL 的 find_in_set函数使用方法: 很多时候我们在设计数据库时有这种情况,比如: 有个文章表里面有个type字段,他存储的是文章类型,有 1头条,2推荐,3热点,4图文 …..11,12,13等等 现在有篇文章他既是 头条,又是热点,还是图文, type中以 1,3,4的格式存储. 那们我们如何用sql查找所有type中有4图文标准的文章呢, 这就要我们的find_in_set出马的时候到了. 先看mysql手册中find_in_set函数的语法: FIND_IN_SET(str,strlist) 假如字符串str 在由N 子链组成的字符串列表strlist 中,则返回值的范围在 1 到 N 之间。一个字符串列表就是一个由一些被‘,’符号分开的自链组成的字符串。如果第一个参数是一个常数字符串,而第二个是type SET列,则   FIND_IN_SET() 函数被优化,使用比特计算。如果str不在strlist 或strlist 为空字符串,则返回值为 0 。如任意一个参数为NULL,则返回值为 NULL。这个函数在第一个参数包含一个逗号(‘,’)时将无法正常运行。 mysql> SELECT FIND_IN_SET(‘b’,’a,b,c,d’); -> 2 用起来很简单 就以上面我说到的情况来举例: SELECT *… Read More

PHP的password_hash()使用实例

一、前言 PHP5.5 (PHP 5 >= 5.5.0) 提供了许多新特性及Api函数,其中之一就是Password Hashing API(创建和校验哈希密码)。 它包含4个函数:password_get_info()、password_hash()、password_needs_rehash()、password_verify()。 在PHP5.5之前,我们对于密码的加密可能更多的是采用md5或sha1之类的加密方式(没人像CSDN那样存明文吧。。),如: echo md5("123456"); //输出: e10adc3949ba59abbe56e057f20f883e 但是简单的md5加密很容易通过字典的方式进行破解,随便找个md5解密的网站就能获取原始密码。   二、Password Hashing API php5.5提供的Password Hashing API就能很好的解决这些问题。 我们先来看password_hash()函数: string password_hash ( string $password , integer $algo [, array $options ]) 它有三个参数:密码、哈希算法、选项。前两项为必须的。 让我们使用password_hash()简单的创建一个哈希密码: $pwd =… Read More

PHP: extract 将数组array的key变为变量 ( extract函数的定义和用法 )

将键值 “Cat”、”Dog” 和 “Horse” 赋值给变量 $a、$b 和 $c: <?php $a = "Original"; $my_array = array("a" => "Cat","b" => "Dog", "c" => "Horse"); extract($my_array); echo "\$a = $a; \$b = $b; \$c = $c"; ?> 定义和用法 extract() 函数从数组中将变量导入到当前的符号表。 该函数使用数组键名作为变量名,使用数组键值作为变量值。针对数组中的每个元素,将在当前符号表中创建对应的一个变量。 第二个参数 type… Read More

浅谈 PHP 与手机 APP 开发(API 接口开发)

这个帖子写给不太了解PHP与API开发的人 一、先简单回答两个问题: 1、PHP 可以开发客户端? 答:不可以,因为PHP是脚本语言,是负责完成 B/S架构 或 C/S架构 的S部分,即:服务端的开发。(别去纠结 GTK、WinBinder) 2、为什么选择 PHP 作为开发服务端的首选? 答:跨平台(可以运行在UNIX、LINUX、WINDOWS、Mac OS下)、低消耗(PHP消耗相当少的系统资源)、运行效率高(相对而言)、MySQL的完美搭档,本身是免费开源的,…… 二、如何使用 PHP 开发 API(Application Programming Interface,应用程序编程接口) 呢? 做过 API 的人应该了解,其实开发 API 比开发 WEB 更简洁,但可能逻辑更复杂,因为 API 其实就是数据输出,不用呈现页面,所以也就不存在 MVC(API 只有 M 和 C), 1、和 WEB 开发一样,首先需要一些相关的参数,这些参数,都会由客户端传过来,也许是 GET… Read More

php程序员应具有的7种能力

php程序员应具有什么样的能力,才能更好的完成工作,才会有更好的发展方向呢?在中国我想您不会写一辈子代码的,那样不可能,过了黄金期,您又怎么办呢?看了本文后,希望对您有所帮助。   一,php能力   1,了解阶段,您能写一些代码,因为那是在手册和google的帮助下,您才完成的。变量乱定义,N多函数不知道,做起事来很慢,想到什么写什么,代码写的比较乱,后期维护很麻烦。   2,熟悉阶段,经常查函数,手册估计也看过一,二遍了,常用的函数基本上您都了解了。后 期维护给您带来了不少痛苦,您开始发现自己的代码有很多不足,开始思考如果改进自己的代码,如何站在项目的角度来规划自己的代码,而不是想到什么写什么, 知道如何来减少冗余代码,使您的代码清晰,知道什么样的代码写出来让人看着舒服,基本的代码规范,已经形成。为了提高自己,会特意的去一些技术性的论坛, 学习研究。   3,很熟悉阶段,本来我想写精通的,到现在我也不知道精通是到什么程度,也没有听到有人 说自己精通PHP的,所以就用很熟悉了。这个阶段,我想您已经从面向过程进入了面向对象。个人觉得面向对象的最大好处就是,能使整个项目功能化,模块化, 后期维护,改版,升级就很方便了。没有面向对象的时候,不也一样开发吗.这个时期,您已经研究过了一种或者几种框架,结合自己的实际项目经验,在脑子里已 经能形成自己的一个框架,这个框架是最适合你的。并且能够将这个框架运用到实际的开发中去,以提高自己的开发效率。   如果您刚写代码的时候,就有人能约束你按OOP的思想去写代码的话,那您就遇到贵人了。当不好的代码习惯养成时,在想改就不那么容易了。   二,数据库能力   用php来做项目的话,用mysql是最多的了,其次是pgsql。因为他们二个是免费的。哈哈,以mysql为例   1,了解阶段,知道mysql是什么,能写一些简单的sql语句,能设计简单的表,知道如何使用数据库管理工具(如:phpmyadmin)   2,熟悉阶段,知道如何才能写出高效率的sql语句,了解索引原理,知道如何创建索引, 会写一些储存过程,触发器等,能通过各种手段来分析,测试数据库,例如:利用mysqlslap来进行压力测试,通来explain来分析sql语句,通 过开启慢查询来分析哪些sql语句真正影响mysql的运行,能利用dbdesigner4,mysql workbench为设计数据库,能在命令状态下,查询,分析mysql环境变量,来分析mysql的运行状态等等   3,很熟悉阶段,对于各有种存储引擎的原理非常熟悉,知道通过修改配置文件来,使存储引 擎达到最优化,知道如何来优化数据库的最大连接数,知道怎么样来优化mysql的I/o瓶颈,为了项目的需要,向mysql数据库增加存储引擎或者插件, 知道如何搭建数据库集群,并监控数据库的运行状态等等   三,html,css能力 php是脚本语言,我们用php大多数情况下是用来做网站的,慨然是网站,那肯定是离不开html,css   1,了解阶段,知道html标签是干什么用的,通过网络和手册能自主的写一些html,知道css是怎么回事,能在html中写一些简单的style等   2,熟悉阶段,能利用css来能设计一些简单的布局,可以将css单独的写成文件,熟悉css的语法规则,以及继承性等  … Read More

解决URL出现%E2%80%8E(Zero-Width Space)

当URL出现%E2%80%8E就代表你的URL里面有包含一个ZERO-WIDTH SPACE (ZWSP) 这个是肉眼无法发现的空白,有时候你会觉得明明已经按下→了,却怎么游标还在原地,没有移动到下一个字元去   这种时候就代表这两个字元中间有一个ZWSP的存在 ZWSP一般情况是打不出来的,但是如果你是透过WORD等等的文件编辑器复制贴上的 就很有可能含有ZWSP,一般情况下ZWSP并不影响阅读 但是当它变成URL的一部分,就会变成%E2%80%8E ,使你的URL错误 这都还算是好发现且好解决的 要是当他要拿来当hash的值做验证,如同下面这样 if(sha1($password)!== sha1($_POST['password'])){ // no permission } 就会发现密码看起来一样,可是却怎么也过不了的鬼打墙… 查起来很痛苦的… 可以透过下面的程式码过滤掉 // remove zero width space $value = str_replace("xe2x80x8b", '', $value); $value = str_replace("xe2x80x8c", '', $value); $value = str_replace("xe2x80x8d", '',… Read More

Adaptive Images : 为不同的屏幕尺寸提供不同的图片

为其提供不同的图片。接下来我们就看一看如何利用该技术实现图片自适应。 设置自适应图片 实现 Adaptive Images 解决方案需要 Apache 2、PHP 5.x 和 GD 库,也就是说需要 Web 服务器端编程。首先,在其网站上下载.zip 文件开始配置:   解 压文件,然后将其中的adaptive-images.php和.htaccess文件拷贝到网站的根目录。如果你网站的根目录下已经有一 个.htaccess文件了,不要覆盖它。参考下载包中的instructions.htm文件看看怎么做合适。接着在网站根目录下创建一个名为 ai-cache 的文件夹。   用你最喜欢的 FTP 客户端软件设置该文件夹的权限为777。   然后把如下 JavaScript 代码复制到每个需要自适应图片的网页的头部: <script>document.cookie=’resolution=’+Math.max(screen.width,screen.height)+'; path=/';/script> 如果你没有使用 HTML5(在下一章会改用 HTML5),想让页面通过标准验证,则需要追加 type 属性。所以 script 标签应如下所示: <script type=”text/javascript”>document.cookie=’resolution=’+Math.maxscreen.width,… Read More

PHP利用FPDI 制作PDF 档案 (php合并pdf, php签名pdf)

昨天研究如何在既有的PDF 档案上放入中文字,虽然找到支援中文的FPDF ,但是有些Unicode 字集我实在试不出如何显示(如:堃) 。   我的同事建议我用图形来解决看看,以下就是我的实验过程(我用的是Windows 平台) 。   我用的相关技术如下: 名称说明下载网址 FPDF PHP 上用来产生PDF 的第三方套件 [http://www.fpdf.org/](http://www.fpdf.org/) FPDI 用来载入一个已存在的PDF 档案,以供FPDF 使用 [http://fpdi.setasign.de/](http://fpdi.setasign.de/) 香港参考宋体(DFSongSd.ttf) 包含许多Windows 内建中文字体所没有的中文字 [http://glyph.iso10646hk.net/index.jsp](http://glyph.iso10646hk.net/index.jsp) GD 2 PHP 产生图形用的延伸套件 PHP Win32 内建 iconv 转换文字编码 PHP Win32 内建   首先,我利用FPDI… Read More

一组PHP可逆加密解密算法

对于大部分密码加密,我们可以采用md5、sha1等方法。可以有效防止数据泄露,但是这些方法仅适用于无需还原的数据加密。   对于需要还原的信息,则需要采用可逆的加密解密算法。 下面一组PHP函数是实现此加密解密的方法:   加密算法如下: function encrypt($data, $key) { $key = md5($key); $x = 0; $len = strlen($data); $l = strlen($key); for ($i = 0; $i < $len; $i++) { if ($x == $l) {

详解如何在ubuntu上安装node.js

第一步:安装依赖包 1. 安装python 2.6版或者更高(ubuntu默认都已安装,可以在terminal中使用 pyhton -v 命令查看python版本)。 2. 安装其他依赖包: sudo apt-get install g++ curl libssl-dev apache2-utils 3. 安装git工具: sudo apt-get install git-core 第二步:获取源码 git clone git://github.com/joyent/node.git 等待下载完成,大小为20+m。 第三步:指定编译版本,重要!   1.先进入存放下载源码的文件夹: cd node 2. 指定迁出版本: git checkout v0.4.10 这里非常重要,因为目前最新的node版本为0.5.5-pre,但是很多常用的包仅支持到0.4.10(比如express),所以如果使用最新版node的话,会导致npm无法下载相应的包。 3. 指定路径,编译执行:… Read More

PHP错误类型及屏蔽方法

程序只要在运行,就免不了会出现错误,错误很常见,比如Error,Notice,Warning等等。之前我们介绍过《易犯的PHP小错误及相应分析》《为开发者准备的10款错误报告和追踪工具》,这篇文章具体说一下PHP的错误类型和屏蔽方法。在PHP中,主要有以下3种错误类型。 1. 注意(Notices) 这些都是比较小而且不严重的错误,比如去访问一个未被定义的变量。通常,这类的错误是不提示给用户的,但有时这些错误会影响到运行的结果。 2. 警告(Warnings) 这就是稍微严重一些的错误了,比如想要包含include()一个本身不存在的文件。这样的错误信息会提示给用户,但不会导致程序终止运行。 3. 致命错误(Fatal errors) 这些就是严重的错误,比如你想要初始化一个根本不存在的类的对象,或调用一个不存在的函数,这些错误会导致程序停止运行,PHP也会把这些错误展现给用户。   不同的错误种类包括: E_ERROR:通常会显示出来,也会中断程序执行。 E_WARNING:通常都会显示出来,但不会中断程序的执行。 E_NOTICE:在脚本正常运行下发生的代码错误。 E_PARSE:语法解析错误。 E_CORE_ERROR:在PHP启动时发生的致命错误。 E_CORE_WARNING:报告在PHP启动时发生的非致命性错误。 E_COMPILE_ERROR:编译时发生的致命错误,指出脚本的错误。 E_USER_ERROR:用户产生的错误信息。 E_USER_WARNING:用户产生的警告信息。 E_USER_NOTICE:用户引发的注意消息。 E_STRICT:编码标准化警告,运行时发生的错误。 E_RECOVERABLE_ERROR:接近致命的运行时错误,若未被捕获则视同E_ERROR。 E_ALL:捕获所有的错误和警告。 屏蔽PHP错误提示 方法一:在有可能出错的函数前加@,然后or die(“”) 如: @mysql_connect(…) or die(“Database Connect Error”) 方法二:编辑php.ini ,查找”display_errors =” ,将“=”后面的值改为”off。 方法三:在php脚本前加error_reporting(0),屏蔽所有错误提示。… Read More

PHP+jQuery+MySql实现红蓝投票功能

这是一个非常实用的投票实例,应用在双方观点对抗投票场景。用户可以选择支持代表自己观点的一方进行投票,本文以红蓝双方投票为例,通过前后台交互,直观展示红蓝双方投票数和所占比例,应用非常广泛。 查看演示 下载源码 本文是一篇综合知识应用类文章,需要您具备PHP、jQuery、MySQL以及html和css方面的基本知识。本文在《PHP+MySql+jQuery实现的“顶”和“踩”投票功能》一文基础上做了适当改进,共用了数据表,您可以先点击了解这篇文章。 HTML 我们需要在页面中展示红蓝双方的观点,以及对应的投票数和比例,以及用于投票交互的手型图片,本例以#red和#blue分别表示红蓝双 方。.redhand和.bluehand用来做手型投票按钮,.redbar和.bluebar展示红蓝双方比例调,#red_num 和#blue_num展示双方投票数。 <div class="vote"> <div class="votetitle">您对Helloweba提供的文章的看法?</div> <div class="votetxt">非常实用<span>完全看不懂</span></div> <div class="red" id="red"> <div class="redhand"></div> <div class="redbar" id="red_bar">