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>";
                
}
            
}
        
}
    
}
}

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

Mar
07

去年六月份的时候,我写过一篇博客《PHP读取JAR文件并生成JAD文件》,之后有不少人问及此事,也有很多人和我要这个程序。

昨天我把那个程序整理了一下,做成了一个JAR生成JAD的小工具(而在我上传的时候发现我以前其实写了这么一个程序,这次真的是重新造了一次轮子),以方便安装手机软件和游戏而没有JAD文件的朋友。

对这个程序感兴趣的朋友,可以看看我去年写的那篇博客,自己照着写一个也是很简单的,这里唯一要说的是运行这个程序的服务器上必须支持ZIP扩展。其实你对这个程序熟悉了,那对于通过PHP操作ZIP文件也就差不多了。

Tags: , ,
Posted in PHP | MySQL
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
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
23

今天的这篇文章用来讨论如何解决导入mysql大数据文件的问题,其实说的简单了就是一条SQL语句,而如果你是一名SQL高手,那完全可以略过此文。

对于经常使用MYSQL的人来说,phpmyadmin是一个必备的工具。这个工具非常强大,几乎可以完成所有的数据库操作,但是它也有一个弱点,对于往远程服务器上导入较大的数据文件的时候会速度奇慢,甚至出现长期没有响应的情况。

为什么会出现这样的情况呢?当我们选择一个sql数据文件并提交的时候,服务器首先要先把文件上传到服务器,然后才会执行导入代码把数据导入到数据库。我们知道phpmyadmin是通过web方式上传的数据文件,而web方式上传是很不稳定的,尤其是网速慢的时候,这就是为什么我们会有那么多次在电脑前面苦苦等待而最终却没有结果的原因。

通过上面的分析,我们知道这个问题是出在web上传而非导入程序,所以如果能避免通过web上传这个问题就好办了。我们可能会想到那功能强大的ftp上传工具,可是phpmyadmin无法选择远程路服务器上的文件,这是很郁闷的。

这里我们要放弃phpmysqladmin,通过mysql语句来导入数据库。很多人会纳闷怎么来执行SQL语句,这是一个关键的问题,这需要你的空间支持SSH(Secure Shell Protocol),并且你还得会一些linux命令
阅读全文 ->

Tags: , ,
Posted in PHP | MySQL
Oct
25

今天遇到一个挺有意思的现象,在使用phpmyadmin管理mysql数据库的时候,发现执行一条sql语句的时间竟然是-0.0000秒。我就奇怪了,0秒就0秒吧,怎么弄出个负0来啊?再怎么说sql语句的执行时间也不可能是负数啊,这phpmyadmin的程序是基于啥计算的呢?截图如下:

phpmyadmin计算的mysql执行时间

不知道这算不算phpmyadmin的一个bug,不过这个bug是挺难发现的,我是才换了新机器,而且是连着点了很多次才出现这么一次,最多也不会大于十分之一的概率。

我平时计算mysql的执行时间一般用microtime()函数来计算,不过用这个函数怎么计算也不会得到负数的啊,真不知道phpmyadmin是怎么计算的,有时间真该研究研究。

Tags: ,
Posted in PHP | MySQL
Oct
21

最近很多朋友说他的MySQL数据库里面的数据是乱码,读取出来在页面显示也不正常,这可能是很多学习PHP操作数据库的时候遇到的一个问题,当然英文除外。

对于这个问题,有两种情况需要说明一下:

第一、写入数据库和读取数据库的页面编码要一致。例如写入的时候页面的编码是UTF8,那读取的时候你也要用UTF8编码的页面显示,这样就不会出现乱码了。这种情况下最好把数据库里面的编码设置为utf8-general-ci,因为这种情况数据在数据库中是乱码的,但是显示出来是正常的,所以设置为别的编码的时候容易出现写入失败。

第二、连接数据库的时候添加mysql_query(”SET NAMES 编码”);。例如写入的时候想用UTF8,则在连接数据库之后添加mysql_query(”SET NAMES UTF8″);,这样所有的数据写入和读取都是以UTF8编码进行的,所以这种情况下数据库中的数据也是正常的,而且这种情况不容易出现错误。

对于这两种情况,我觉得首先得记住第一种,就是写入和读取的时候一定要保证页面的编码相同,这也是第二条的一个基础,然后再记住mysql_query(”set names 编码”);这条语句,这样在你的非英文页面中就不会出现乱码了。

Tags: ,
Posted in PHP | MySQL, 刀光剑影