YOYO的最新BLOG文章

Jun
30

很多时候我们要遍历一个文件夹里面的所有目录,列出里面所有的文件,PHP本身自带的有一个readdir的函数,不过只能读取当前的目录,根据这个函数,我写了另外一个函数,用来实现我的需求。函数的原理很简单,主要就是用了一下递归调用。

function file_list($path){
    
if ($handle = opendir($path)) {
        
while (false !== ($file = readdir($handle))) {
            
if ($file != "." && $file != "..") {
                
if (is_dir($path."/".$file)) {
                    
echo $path.": ".$file."<br>";//去掉此行显示的是所有的非目录文件
                    
file_list($path."/".$file);
                
} else {
                    
echo $path.": ".$file."<br>";
                
}
            
}
        
}
    
}
}

这个函数还可以继续做一些改进,加入一些文件夹或文件的图标什么的,这样就可以做成更强大的一个函数了,有兴趣的朋友可以扩展的一下。

Jan
18

这两天一直在做清华的一个项目,这个项目最早是我一年半前用ASP做的,现在要做一下升级。很长时间不用ASP了,现在拿起来发现还真的忘记了不少,对代码都有陌生感了。

对于web语言来说,我接触最早的就是ASP,并且做了一年的ASP程序,后来来到现在的公司才开始接触并正式学习PHP,并一直使用至今。对于ASP来说,是个很适合初学者学习的语言(确切说不是语言),入门非常容易,但是真正的学精并不容易;而PHP也是一个适合初学者学习的语言,但是相对于ASP来说,PHP的门槛还是稍高一点,不过入门之后就没有太大的困难了,有时候我都觉得PHP的语法结构理解起来比ASP的容易得多。

对于ASP的学习,可以说我根本就没彻底的学通,后来就转到PHP了,再加上不经常看,所以现在忘记的都差不多了。其实任何一种语言的学习,都是一个长期积累的过程,三心二意的去学一门语言是永远都不可能学好的。我以前曾经奢望自己能学通所有常用的语言,而我现在不那么想了,我觉得认真的钻研一门语言就够了,就像我现在学习PHP一样。

计算机语言都是相通的,当你一门语言学好了之后,其他的语言的逻辑思维也都是差不多的,唯一需要熟悉的是语法和语言的结构这些表层的东西,等这些熟悉之后你就可以轻松驾驭这门语言了。

Tags: , ,
Posted in 想说就说
Jan
15

有些时候我们看到网络上有一些漂亮的图片,而又不想手动去保存下来,尤其是大量的这样的图片,那这个时候我们需要写一段程序来帮助我们完成这个工作。今天在整理资料的时候发现以前找到的一个函数,通过这个函数我们就可以实现上面的功能。

主要函数:

function GrabImage($url,$filename="") {
    
if($url=="") return false;
 
    
if($filename=="") {
        
$ext=strrchr($url,".");
        
if($ext!=".gif" && $ext!=".jpg" && $ext!=".png") return false;
        
$filename=date("YmdHis").$ext;
    
}
 
    
ob_start();
    
readfile($url);
    
$img = ob_get_contents();
    
ob_end_clean();
    
$size = strlen($img);
 
    
$fp2=@fopen($filename, "a");
    
fwrite($fp2,$img);
    
fclose($fp2);
 
    
return $filename;
}

获取一张图片的代码:

$img=GrabImage("http://www.google.com/intl/en_ALL/images/logo.gif","logo.gif");
if($img){
    
echo '<img src="'.$img.'">';
}else{
    
echo "false";
}

这是保存google的logo的例子,获取到的图片保存在同级目录下面。

获取一系列的有规律的图片(例如:以数字1-100命名的100张图片):

for ($i=1;$i<=100;$i++){
    
$img=GrabImage("http://www.yourimagesite.com/images/$i.gif","images/$i.gif");
}

上面的www.yourimagesite.com是图片的网址,需要自己修改,程序执行完后,所有的图片将会保存到images目录下面。

Tags: , ,
Posted in PHP | MySQL
Jan
11

豆瓣API开放了已经快半个月了,今天我测试了一下,发现还不错,使用起来也比较简单。我用的是PHP+JSON来测试的,不过要想用JSON,PHP版本必须达到5.2.0以上才可以。下面是我以搜索和CSS相关的书籍来简单的说一下我的实现方式。

获得豆瓣的数据,然后转化为一数组(记得修改{yourapikey}为你在豆瓣上申请的api的key):

header("Content-Type: text/html; charset=utf-8");
$contents = file_get_contents("http://api.douban.com/book/subjects?apikey={yourapikey}&amp;q=css&amp;max-results=10&amp;alt=json");
$array = json_decode($contents,true);

文字链接方式(由于PHP的变量都是以$开头的,所以数组key里面出现的这个$是个不大不小的问题,我稍微变通了一下):

foreach ($array["entry"] as $item){
    
echo '<li><a href="'.$item["link"][1]["@href"].'">'.$item["title"]["$"."t"].'</a></li>';
}

图片链接方式:

foreach ($array["entry"] as $item){
    
echo '<li><a href="'.$item["link"][1]["@href"].'"><img src="'.$item["link"][2]["@href"].'" title="'.$item["title"]["$"."t"].'" border="0" /></a></li>';
}

具体实现效果,请看这里:http://www.fesite.com/douban_api.php

容易吧,其实就是这么简单!不过现在的豆瓣开放的API功能还是太有限了,很多信息都无法通过API获得到,例如:好友列表等,不过这已经是一个很不错的开始了,希望豆瓣以后做得越来越好!

Tags: , , , ,
Posted in PHP | MySQL
Jan
03

对于语言之间性能优劣的话题,我好久没参与了,而且越是对这些语言认识的越多,越会感觉这种比较是多么的没有意义。我今天写这篇文章做这个比较是为了让我们能够选择更适合自己的语言,而不是为了追求更完美的语言。世界上没有完美的语言。

ASP是微软公司开发的代替CGI脚本程序的一种应用,它可以与数据库和其它程序进行交互,是一种简单、方便的编程工具。ASP相对比较简单,适合一些语言初学者学习,并能满足绝大多数中小型网站的编写和性能的要求,目前在国内使用的最多。唯一的一点是ASP的许多组件需要自己来安装,对于刚刚接触ASP的人来说,可能是一个小小的门槛。

PHP 是一种 HTML 内嵌式的语言,PHP与微软的ASP颇有几分相似,都是一种在服务器端执行的嵌入HTML文档的脚本语言,语言的风格有类似于C语言,PHP 独特的语法混合了 C、Java、Perl 以及 PHP 自创新的语法,它可以比 CGI 或者 Perl 更快速的执行动态网页。PHP相对也比较简单,对于熟悉ASP设置的人来说,PHP初期的配置可能稍微难一些,不过很多扩展都打包在我们下载的文件里面了,只要初期配置好了,以后几乎不用再去下载什么扩展来配置了。PHP初期入门门槛比ASP稍高,但是入门之后几乎没有什么门槛了,适合一些语言初学者学习(有一定的C语言基础会更好),并能满足大中小型网站的编写和性能要求,在国内用的人较ASP少,而在欧美国家却广为流行。

ASP.NET不仅仅是ASP的下一个版本,而且是一种建立在通用语言上的程序构架,能被用于一台Web服务器来建立强大的Web应用程序。ASP.net提供许多比现在的Web开发模式强大的的优势。ASP.NET在性能上比ASP有了很大的提升,可以满足很多大型网站的性能要求,但是在使用习惯上却区别于ASP和PHP,有比较复杂的语言结构。门槛较高,不太适合语言初学者,有一定的编程基础会比较好。

以上是三种常用的WEB开发语言的简单比较,也是我最近看ASP.NET后的一点想法,写出来和大家分享,希望对于一些学习语言的人有所帮助。再次重申:语言的比较不是为了找到更完美的语言,而是找到最适合自己的语言。

Tags: , , , ,
Posted in 想说就说
Dec
23

所谓实现文本文件的下载就是说当我们点击一个文本文件的链接的时候不是打开这个文件,而是弹出一个下载对话框让我们下载,这就是今天讨论的主要问题。PHP帮助文档里面关于PHP通过header触发下载的说明比较简单,而网上关于此方面的文章也少的可怜,有很多文章都无法实现所需要的效果。今天我也来谈一下这个方面的话题,如果你感觉比网上的某些文章有所改进,那我就很知足了。

如果从准确的角度来说,那PHP文档是最准确的,因为它很简练的列出了实现文本类文件触发下载所需要的三条语句,以PDF为例就是:

// We'll be outputting a PDF
header('Content-type: application/pdf');
// It will be called downloaded.pdf
header('Content-Disposition: attachment; filename="downloaded.pdf"');
// The PDF source is in original.pdf
readfile('original.pdf');

这三句是正确的,但是在真正用的过程中很容易出现一些无法预料的问题,如果你是一个很仔细的人的话,也可以很容易的避免这些问题。而我不是,所以我就遇到了这样的问题,这里就以我的问题来简单说一下。

对于第一句,应该没啥说的,是必须的,只要改一下文档的类型就行,例如是下载txt文件,那就改为header(’Content-type: application/txt’);,第二句也没啥说的,就是为你的下载文档起一个名字,如果是txt文件的话,可以改为header(’Content-Disposition: attachment; filename=”downloaded.txt”‘);,第三句的问题就比较多了,readfile这个函数的意思就是读取一个文件然后输出,这里文件的路径需要是真实的文件路径,如果是downloads文件夹下面的一个original.txt文件,可以这样写readfile(’downloads/original.txt’);,而如果提交的页面会输出文本等字符,那么下载到的文件会是原文件original.txt和提交的页面输出的文字的混合文件。我在这里就缺少了仔细的观察,一看下面不对就立即去查代码了,而没发现上面的文本就是我需要的内容,发现了这部分内容,你可能就很快想到怎么来解决这个问题了,也就是关闭提交到的页面的文本内容的输出。
阅读全文 ->

Tags: , ,
Posted in PHP | MySQL
Nov
30

前一段时间我写过一篇在Windows上安装Apache+PHP+MySQL的博客,而最近由于要配置一台服务器,我又不得不在Windows2003下的IIS6.0上配置了一下PHP+MySQL的环境。这次配置和两年前在Windows2000上配置相比,还是有一些的差别,网上关于这方面的资料不少,而是莫衷一是的东西太多,所以写就此文,希望能对看到此文的朋友有所帮助。

一、安装环境
操作系统是 Windows 2003 英文版+IIS 6.0, PHP, MySQL 的最新版本是截止到 2007.09.07,分别在其官网下载的:
* PHP 5.2.5 (Windows Binaries PHP 5.2.5 zip package): http://www.php.net/downloads.php
* MySQL 5.1 Windonws: http://dev.mysql.com/downloads/

二、由于Windows 2003默认安装了IIS6.0,所以安装这步省略。

三、在Windows 2003下安装 MySQL 5.1
MySQL 的安装比较简单,它提供了一个 win32 的安装包。下载后根据提示一路next安装即可。安装完成后,会问你要不要到官网注册,跳过即可。然后会问你是否 Configure the MySQL Server now,选中并继续,然后根据提示,设定 字符集,以及 root 管理员的密码即可。

四、在 Windows 2003 下安装 php 5.2.5
1. 将下载的 php 5 ZIP 包直接解压,我直接将 PHP 5.2.5 zip 文件解压到 C:\php 目录下面。安装 php 不建议使用 win32 安装程序(主要是以后安装扩展麻烦)。

2. 在资源管理器中进入 php 的安装目录,将 php.ini-recommended 复制一份,命名为 php.ini。然后打开 php.ini。

3. 找到:

;extension=php_mysql.dll

将前面的 ; 号去掉, 改成:

extension=php_mysql.dll

然后把php.ini复制到Windows目录下面,把libmysql.dll复制到Windows下面的System32目录。这个地方很多文章说把php5ts.dll也复制到system目录的,而经过我的测试发现,不用复制也是可以的(有不同看法的可以在下面提出来)。

4. 找到:

extension_dir = “./”

将其改为你的 php 安装目录下 ext 子目录的绝对路径。例如我的:

extension_dir = “C:/php/ext/”

这步很重要 。否则接下来 php 会找不到 php_mysql.dll 模块,无法装载。
阅读全文 ->

Tags: , , , ,
Posted in Server
Oct
15

此文章的安装方法适用于Windows XP下的Apache+PHP+MySQL安装。

1. 安装环境
操作系统是 Windows XP 中文版, Apache, PHP, MySQL 的最新版本是截止到 2007.09.07,分别在其官网下载的:
* Apache 2.2.6:http://apache.mirror.phpchina.com/httpd/binaries/win32/
* PHP 5.2.4 (Windows Binaries PHP 5.2.4 zip package): http://www.php.net/downloads.php
* MySQL 5.0.45 Windonws: http://dev.mysql.com/downloads/

2. 安装的目录结构规划
为了方便维护,可以将服务器软件安装在系统盘(C盘)而把自己的文件定位到其他盘,这样对于以后的维护很重要。

3. 在 Windows XP 下安装 Apache 2.2.6
Windows XP 下的安装
1. 运行 apache 2.2.6 的安装程序,根据提示一路 Next 即可。在 Server Information 的 Network Domain、Server Name 字段随便填上一个域名即可,如php.com,然后根据提示一路 Next 完成即可。

2. 在安装结束时,会弹出一个 DOS 窗口,然后就消失了,这是系统apache自动启动了。

4. 在 Windows XP 下安装 php 5.2.4
1. 将下载的 php 5 ZIP 包直接解压,我直接将 PHP 5.2.4 zip 文件解压到 d:\php 目录下面。安装 php 不建议使用 win32 安装程序(主要是以后安装扩展麻烦)。

2. 在资源管理器中进入 php 的安装目录,将 php.ini-dist 或 php.ini-recommended 复制一份,命名为 php.ini。然后打开 php.ini。

3. 找到:

;extension=php_mysql.dll

将前面的 ; 号去掉, 改成:

extension=php_mysql.dll

4. 找到:

extension_dir = “./”

将其改为你的 php 安装目录下 ext 子目录的绝对路径。例如我的:

extension_dir = “D:/php/ext/”

这步很重要 。否则接下来 php 会找不到 php_mysql.dll 模块,无法装载。

5. 在“控制面板”->“系统”->“高级”->“环境变量”,在“系统变量”里面找到path,编辑path的变量值,添加你的php目录D:\php,前面一定要用分号(;)把它和前面的值分开。 阅读全文 ->

Tags: , , ,
Posted in Server, 刀光剑影