毛蛋(maoegg)网

——只为技术而存在

正在浏览 PHP之邦 里的文章

正则–进阶

抢沙发

正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。

列目录时, dir *.txt或ls *.txt中的*.txt就不是一个正则表达式,因为这里*与正则式的*的含义是不同的。

正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。
继续阅读

正则–初步

抢沙发

1、入门简介

简单的说,正则表达式是一种可以用于模式匹配和替换的强有力的工具。我们可以在几乎所有的基于UNIX系统的工具中找到正则表达式的身影,例如,vi编辑器,Perl或PHP脚本语言,以及awk或sed shell程序等。此外,象javascript这种客户端的脚本语言也提供了对正则表达式的支持。由此可见,正则表达式已经超出了某种语言或某个系统的局限,成为人们广为接受的概念和功能。
正则表达式可以让用户通过使用一系列的特殊字符构建匹配模式,然后把匹配模式与数据文件、程序输入以及WEB页面的表单输入等目标对象进行比较,根据比较对象中是否包含匹配模式,执行相应的程序。
举例来说,正则表达式的一个最为普遍的应用就是用于验证用户在线输入的邮件地址的格式是否正确。如果通过正则表达式验证用户邮件地址的格式正确,用户所填写的表单信息将会被正常处理;反之,如果用户输入的邮件地址与正则表达的模式不匹配,将会弹出提示信息,要求用户重新输入正确的邮件地址。由此可见正则表达式在WEB应用的逻辑判断中具有举足轻重的作用。

2、基本语法

在对正则表达式的功能和作用有了初步的了解之后,我们就来具体看一下正则表达式的语法格式。
正则表达式的形式一般如下:
/love/
其中位于“/”定界符之间的部分就是将要在目标对象中进行匹配的模式。用户只要把希望查找匹配对象的模式内容放入“/”定界符之间即可。为了能够使用户更加灵活的定制模式内容,正则表达式提供了专门的“元字符”。所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。 继续阅读

PHP调用Linux系统的常用函数
1、exec函数
<?php
$test = “ls /tmp/test”; //ls是linux下的查目录,文件的命令
exec($test,$array); //执行命令
print_r($array);
?>
2、system函数
<?php
$test = “ls /tmp/test”;
$last = system($test);
print “last: $last\n”;
?>
3、passthru函数
<?php
$test = “ls /tmp/test”;
passthru($test);
?>
4、popen函数

继续阅读

1. If a method can be static, declare it static. Speed improvement is by a factor of 4.
如果一个方法可静态化,就对它做静态声明。速率可提升至4倍。

2. echo is faster than print.
echo 比 print 快。

3. Use echo’s multiple parameters instead of string concatenation.
使用echo的多重参数(译注:指用逗号而不是句点)代替字符串连接。

4. Set the maxvalue for your for-loops before and not in the loop.
在执行for循环之前确定最大循环数,不要每循环一次都计算最大值。

5. Unset your variables to free memory, especially large arrays.
注销那些不用的变量尤其是大数组,以便释放内存。

6. Avoid magic like __get, __set, __autoload.
尽量避免使用__get,__set,__autoload.

7. require_once() is expensive.
require_once()代价昂贵。

8. Use full paths in includes and requires, less time spent on resolving the OS paths.
在包含文件时使用完整路径,解析操作系统路径所需的时间会更少。
继续阅读

<?php
class mysql {
	private $db_host; //数据库主机
	private $db_user; //数据库用户名
	private $db_pwd; //数据库用户名密码
	private $db_database; //数据库名
	private $conn; //数据库连接标识;
	private $result; //执行query命令的结果资源标识
	private $sql; //sql执行语句
	private $row; //返回的条目数
	private $coding; //数据库编码,GBK,UTF8,gb2312
	private $bulletin = true; //是否开启错误记录
	private $show_error = false; //测试阶段,显示所有错误,具有安全隐患,默认关闭
	private $is_error = false; //发现错误是否立即终止,默认true,建议不启用,因为当有问题时用户什么也看不到是很苦恼的
 继续阅读

Zend Studio是Zend Technologies开发的PHP语言集成开发环境(Integrated Development Environment IDE)。也支持HTML和js标签,但只对PHP语言提供调试支持。因为是同一个公司的产品,所以提供的Zend Framework方面的支持比其他软件好。

Zend Studio 9 正式发布,主要包含以下更新:
Git和Github支持
云开发部署
深度Zend Framework和Zend Server集成
更快、更精简的IDE

下载:Zend Studio 9.0.0 Final
查看:What’s New in Zend Studio 9

很不错的一个jquery上传文件插件,功能比较强大。

这里我用的是uploadify-v2.1.4版,不少是从官网的文档(www.uploadify.com/documentation/)翻译过来的,然后加上一些自己的理解,配置的。

大部分都是写在注释里了,方便大家理解和使用,以下是代码,源代码请去官网下载吧。

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link href="./uploadify.css" type="text/css" rel="stylesheet" />
<script type="text/javascript" src="./jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="./swfobject.js"></script>
<script type="text/javascript" src="./jquery.uploadify.v2.1.4.min.js"></script>
<script type="text/javascript"> 继续阅读

php时间轴

抢沙发

php中时间轴,即显示为“刚刚”、“5分钟前”、“昨天10:23”等

//时间转换函数
function tranTime($time) {
$rtime = date(“m-d H:i”,$time);
$htime = date(“H:i”,$time);
$time = time() – $time;

if ($time < 60) {
$str = ‘刚刚’;
}
elseif ($time < 60 * 60) {
$min = floor($time/60);
$str = $min.’分钟前’;
}
elseif ($time < 60 * 60 * 24) {
$h = floor($time/(60*60));
$str = $h.’小时前 ‘.$htime;
} 继续阅读

用mysql写触发器,老是没办法定义,报错

后来不断的弱化触发器的功能,直到只给其中一个字段加一些值了,还是不行

杯具啊

后来,触发器能定义好了,执行的时候又遇到问题了,也就是说触发器被触发,但是里面的操作没有执行。

去啊,尼玛坑爹吶

报错是这个:
Can’t update table ‘visited_cate’ in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

查完中文查英文,你妈呀,不支持操作啊

看csdn上的一个例子吧

如果你在触发器里面对刚刚插入的数据进行了 insert/update, 则出现这个问题。因为会造成循环的调用. 继续阅读

首先:
服务端页面 server.php
本地页面 local.php
server.php会echo出来json格式的数据(不能用return方式的)
local.php使用Ajax的方式接收数据(使用jQuery)

先说失败的经历:
刚开始的时候直接用GET或者POST的方式访问:

$.get(“http://maoegg.com/server.php?id=7846286947″, function(result){alert(result.name);}
这种方式是不行滴,因为会产生跨域问题,jQuery会报错说“拒绝访问”
用POST就更不行了,后来查资料的时候偶然发现POST是最拒绝跨域的(jsonp跟callback也是不行的,这个后面再说)

后来用$.getJSON(“http://maoegg.com/server.php?id=7846286947″, function(result){alert(result.name);}
这种方式也是不行的,也会产生跨域问题

下面就说可行的方法了:
前提是服务端页面加上callback:
举例说,本来server.php产生的数据是这样的:
$jsondata = “{symbol:’IBM’, price:120}”;
echo $jsondata;

现在要变成 echo $_GET['callback'].’(‘.$jsondata.’)'; 继续阅读

做程序需要用到ImageMagick,于是就在网上下了安装文件

这里用的是ImageMagick-6.7.0-0-Q8-windows-dll,安装完成后,将安装路径写入PATH中(安装的最后一步可以选择自动添加)

在PHP的ext中将php_imagick_dyn-Q16.dll拖入,然后在PHP.ini中将扩展添加上去,重启Apache…

测试程序,谁知道没法切图

在命令行下执行:

“d:\Program Files\ImageMagick-6.7.0-Q8\convert.exe” d:\desktop\maoegg_big.jpg -gravity Center -resize 50×50 -crop 30×30 -strip +repage d:\maoegg_small.jpg

执行正常啊,将大图切成了几个小图

后来自己写了个测试页面: 继续阅读

最近做个东西,要实现的效果是20多个图片,每3个图片一排,用js滚动,网上查了一下,有一种是从在一维数组取值,实现一个1行有3列的表格的效果。

代码如下:

<table width=”555″ height=”26″ border=”0″ cellpadding=”0″ cellspacing=”0″>
<?php
$rs=array(“aaa”,”bbb”,”ccc”,”ddd”,”eee”,”fff”,”ggg”,”hhh”,”iii”);
$k=0;
for ($i=0; $i<9; $i++){
if($k == 0) echo “<tr>”;

echo <<<EOT 继续阅读

1)判断一个元素是否存在

使用jQuery判断元素是否存在,非常的简单。对于一个jQuery对象,我们只需要用length属性即可判断元素是否存在,如果存在肯定是大于0,示例代码:

判断这个图片是否存在,如果存在在把这个图片替换

<img src=”http://www.jquery001.com/images/demo/2010/anyixuan.jpg” style=”  float:right” id=’uu2′>

    <script type=”text/javascript”>$(document).ready(function() {if($(‘#uu2′).length>0){

    $(‘#uu2′).attr(“src”, ”http://www.blogkid.cn/wp-content/uploads/2008/04/memcached_shell_2.JPG”);

    }

    });

    </script>

2)获得文本框焦点,主要使用focus 获得焦点

<input type=”text” id=”txtUser” style=”width:200px; ” />

$(‘#txtUser’).bind(“focus”,function(){
$(this).animate({ width: “500px” }, 1000);
})
$(‘#txtUser’).bind(“blur”,function(){
$(this).height(“120px”);
})
});

3)对失效的图片的处理 继续阅读

如果绑定给window对象,则会在所有内容加载后触发,包括窗口,框架,对象和图像。如果绑定在元素上,则当元素的内容加载完毕后触发。

注意:只有当在这个元素完全加载完之前绑定load的处理函数,才会在他加载完后触发。如果之后再绑定就永远不会触发了。所以不要在$(document).ready()里绑定load事件,因为jQuery会在所有DOM加载完成后再绑定load事件。

调用load方法的完整格式是:load( url, [data], [callback] ),

其中:

  • url:是指要导入文件的地址。
  • data:可选参数;因为Load不仅仅可以导入静态的html文件,还可以导入动态脚本,例如PHP文件,所以要导入的是动态文件时,我们可以把要传递的参数放在这里。
  • callback:可选参数;是指调用load方法并得到服务器响应后,再执行的另外一个函数。一:如何使用data
    1.加载一个php文件,该php文件不含传递参数
    
    
    $("#myID").load("test.php");

    继续阅读

  • 对于大多数web应用来说,数据库都是一个十分基础性的部分。如果你在使用PHP,那么你很可能也在使用MySQL—LAMP系列中举足轻重的一份子。

    对于很多新手们来说,使用PHP可以在短短几个小时之内轻松地写出具有特定功能的代码。但是,构建一个稳定可靠的数据库却需要花上一些时日和相关技能。下面列举了我曾经犯过的最严重的11个MySQL相关的错误(有些同样也反映在其他语言/数据库的使用上)。。。

    1、使用MyISAM而不是InnoDB

    MySQL有很多数据库引擎,但是你最可能碰到的就是MyISAM和InnoDB。 继续阅读

    PHP 5.3 ForWindows,一共有四个版本,VC9×86NonThreadSafeVC9×86ThreadSafeVC6×86NonThreadSafeVC6×86ThreadSafe,从PHP官网下载页面的英文choose我们可以知道如下信息:

    一、PHP5.3的VC9版和VC6版

    VC6就是LegacyVisualStudio6compiler,就是使用Visual Studio 6编译的。

    VC9就是TheVisualStudio2008compiler,就是用微软的Visual Studio 2008编辑器编译的(使用VC9版的时候需要有C++2008的运行时环境Microsoft 2008 C++ Runtime (x86) 或 Microsoft 2008 C++ Runtime (x64) )。

    继续阅读

    重置MySQL密码

    抢板凳

    错误示范:首先停止MySQL服务,然后使用skip-grant-tables参数启动它:

    shell> /etc/init.d/mysql stop

    shell> mysqld_safe –skip-grant-tables &

    此时无需授权就可以进入到MySQL命令行,使用SQL重置MySQL密码:

    UPDATE mysql.user SET Password=PASSWORD(‘…’) WHERE User=’…’ AND Host= ‘…’;

    FLUSH PRIVILEGES;

    为什么说它是错误的?因为在单纯使用skip-grant-tables参数启动服务后, 继续阅读

    mssql_connect($hostname,$dbuser,$dbpasswd) or die(“无法连接数据库服务器!”);
    如果是本地的mssql数据库,则链接通过。但,如果链接局域网内另外一台机器就不行了。错误信息为:
    Warning: mssql_connect() [function.mssql-connect]: message: 用户 ‘(null)’ 登录失败。原因: 未与信任 SQL Server 连接相关联。 (severity 14)

    是php.ini的原因。
    网上的教程是这样的‘mssql.secure_connection = On’,本地链接正常。
    但,对于链接局域网的服务器这种配置是不正确的,应该是mssql.secure_connection = Off。

    将标题的中文自动翻译成英语slug,这样的好处在于SEO ,譬如本页的网址auto-slug-translate-plugin.html就是根据slug生成的,如果你启用了这个插件就不需要手动为每个标题再做一次翻译了,google的翻译是越来越完善和准确了,不得不服,相关演示请看http://demo.storyday.com

    安装方法:和其他插件一样,上传到插件目录下,后台激活即可.插件激活之后如再新增加文章,对应的slug将会自动从标题翻译得到.

    下载地址:cos_slug_translator.zip 

    再有一个就是批量将中文标题转换slug为中文的插件,免去了一个一个翻译的麻烦。

    更新版:cos_slug_converter

    继续阅读

    1.Template(模板) — 其实就是一个代码集,主题中很多地方会利用到这个代码集,所以把它们整合成一个模板,这样就就不必一遍遍输入这些重复代码。

    2.Template file(模板文件) — 一个包含一个或者多个代码集(模板)文件。每个主题是由多个模板文件组成的,如:index.php,style.css,sidebar.php等等。

    3.Theme(主题)或者 WordPress theme(WordPress 主题) — 所有你正在使用的文件:文本,图像,代码等等。注意: WordPress theme(主题)和WordPress template(s)(模板)是两个不同的东西,尽管有些人认为他们一样。

    4.Post(日志) — 现在你读的就是一篇日志。此外,它是你 blog 的一个简单的条目,如:一个页面或者一篇日记。

    5.Page(静态页面) — 一种特殊的 post,它不是以分类组织的。它有别于你其他的日志。注意:在 WordPress,page(页面)和 Page(静态页面)是两种不同的东西。