Loading...

php缩略图制作代码

Filed under: PHP,网站技术 — 江东 @ 2009-01-13 22:06:47 才(2)条评论

今天由于上传头像需要,找到了一个很好的程序,不敢独享,特此分享出来,它就是很多朋友可能需要的东西,php制作缩略图,来自这里,代码如下:

<?php
/*
* File: SimpleImage.php
* Author: Simon Jarvis
* Copyright: 2006 Simon Jarvis
* Date: 08/11/06
* Link: http://www.white-hat-web-design.co.uk/articles/php-image-resizing.php
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details:
* http://www.gnu.org/licenses/gpl.html
*
*/
class SimpleImage {
var $image;
var $image_type;
function load($filename) {
$image_info = getimagesize($filename);
$this->image_type = $image_info[2];
if( $this->image_type == IMAGETYPE_JPEG ) {
$this->image = imagecreatefromjpeg($filename);
} elseif( $this->image_type == IMAGETYPE_GIF ) {
$this->image = imagecreatefromgif($filename);
} elseif( $this->image_type == IMAGETYPE_PNG ) {
$this->image = imagecreatefrompng($filename);
}
}
function save($filename, $image_type=IMAGETYPE_JPEG, $compression=75, $permissions=null) {
if( $image_type == IMAGETYPE_JPEG ) {
imagejpeg($this->image,$filename,$compression);
} elseif( $image_type == IMAGETYPE_GIF ) {
imagegif($this->image,$filename);
} elseif( $image_type == IMAGETYPE_PNG ) {
imagepng($this->image,$filename);
}
if( $permissions != null) {
chmod($filename,$permissions);
}
}
function output($image_type=IMAGETYPE_JPEG) {
if( $image_type == IMAGETYPE_JPEG ) {
imagejpeg($this->image);
} elseif( $image_type == IMAGETYPE_GIF ) {
imagegif($this->image);
} elseif( $image_type == IMAGETYPE_PNG ) {
imagepng($this->image);
}
}
function getWidth() {
return imagesx($this->image);
}
function getHeight() {
return imagesy($this->image);
}
function resizeToHeight($height) {
$ratio = $height / $this->getHeight();
$width = $this->getWidth() * $ratio;
$this->resize($width,$height);
}
function resizeToWidth($width) {
$ratio = $width / $this->getWidth();
$height = $this->getheight() * $ratio;
$this->resize($width,$height);
}
function scale($scale) {
$width = $this->getWidth() * $scale/100;
$height = $this->getheight() * $scale/100;
$this->resize($width,$height);
}
function resize($width,$height) {
$new_image = imagecreatetruecolor($width, $height);
imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight());
$this->image = $new_image;
}
}
?>

使用起来也很简单,而且没有任何问题

$newfile = UPLOAD_DIR.”/icons/”.md5($_SESSION[‘USER’]->email).”.jpg”;//上传文件保存的目录
$image = new SimpleImage();
$image->load($_FILES[‘icons’][‘tmp_name’]);//上传的临时文件名
$image->resizeToWidth(80);设置宽度
$image->save($newfile);

xampp cgi的问题

Filed under: PHP,网站技术 — 江东 @ 2008-12-19 23:04:02 还没有评论

apache xampp由于要编写大文件(100M左右)上传程序,所以php就不胜任了,这个时候不得不把perl CGI给搬出来。

调试perl CGI的时候才发现本人在windows下的XAMPP无法正常运行CGI程序,总是显示500错误,花了时间,终于解决了,这里记录如下:

  1. 若没有修改apache conf文件,请将你的cgi文件放置在 htdocs/cgi-bin下;
  2. 程序的第一行一定要写正确perl的路径如:#!”F:\Perl\bin\perl.exe”;
  3. XAMPP自带的perl程序可能不好用,需要下载activeperl自行安装;
  4. 下载安装之后可能CGI.pm版本会落后,所以去下载CGI.pm-3.42.tar.gz或者更新的版本,到perl bin的目录下覆盖原来的内容;

完成以上4点,肯定可以解决XAMPP的CGI问题

shopex大大的进步了

Filed under: PHP,网站技术 — 江东 @ 2008-12-14 18:21:05 才(4)条评论

认识王总,所以接触了shopex。shopex是一个强大而简单的中文电子商城程序,因为它的强大,所以通过这个程序,不会写程序的人可以轻松在网络上开一家自己的网上商城。为什么说它简单,主要他的模板机制:

首先来说说shopex的模板是如何的简单。先给一个总体概念让大家感觉一下,那就是我大概用了不到半天的时间就能比较有信心的说自己能做这个模板了。模 板架构确实简单,比wordpress的模板机制都还要简单(也就是这个草率的保证让这个兄弟怀疑我是一个说大话的人)。shopex的每个页面都有对应 的模板框架文件,然后框架文件再去引用具体的模板文件,这样通过框架文件就可以很方便的修改页面的布局,而通过模板文件就可以自由的修改具体的内容,并且 模板文件还能被其他框架所引用,就相当于被include。这样一对一的模板系统当然就很简单了,所以制作shopex模板,上手是相当容易的(from 谈谈shopex)。

然而正是他的简单让cosbeta感到不适,因为 难易度*工作量=常数。 shopex模板设计是如此的简单以至于工作量非常大庞大,所以最终cosbeta没有再答应给王老板继续做下去了。

最近闲着没事,下载了一个新版的shopex来看看,发现新版的shopex有了很大的改变,模板基于smarty,编写更加灵活,工作量大大的减少了,而且可以嵌入php代码,很多功能就能更加容易的衍生出来了,新版本的shopex和旧版本相比,在模板引擎上已经有了一个质的飞跃。对于smarty这个东西,cosbeta在5年前都已经很熟悉了,所以用起来就更加的顺手了。

看来,或许因为这个原因,cosbeta又会再次和shopex打上交道!如此看来,基于smarty模板引擎的zen-cart应该没有多大优势可言了。

另外一件和shopex无关的小事情在这里一并记录下来:

如何给XAMPP加上zend Optimizer支持,其实XAMPP本身已经集成了zend Optimizer,只不过没有打开支持而已,所以给XAMPP添加zend Optimizer支持也是一件很容易的事情:

  1. 停止apache
  2. 打开xampp/php/php.ini 将 zend_optimizer.enable_loader = 0改成 zend_optimizer.enable_loader =1
  3. 打开xamp/apache/bin/php.ini  将 zend_optimizer.enable_loader = 0改成 zend_optimizer.enable_loader =1
  4. 重启apache即可

NetBeans IDE 6.5 For PHP

Filed under: PHP,网站技术 — 江东 @ 2008-11-27 09:45:01 只有1条评论

第一次接触到netbeans还是在大学的时候,一晃都已经快6年了,那时NetBeans仅仅支持java,是一个java开的集成开发环境,使用起来相当的方便,更好的是它是免费的。如今 Net Beans也支持php了,咱们来看看新版的NetBeans都有些什么特性吧:

新特性包括:一个针对Firefox 和IE的PHP、JavaScript调试的强健的IDE,以及支持Groovy 和Grails。NetBeans IDE 6.5还包含了大量对Java, Ruby on Rails, 和C/C++开发的增强。Java增进包括:内置对Hibernate的支持,允许引入Eclipse工程,及保存自动编译。 From CSDN

下载NetBeans IDE 6.5:
http://communications1.sun.com/r/c/r?2.1.3J1.2U2.11J8XW.CCDJGu..T.Ffaa.2CRg.DPBWEXO0

有关NetBeans IDE 6.5的更多信息:
NetBeans IDE 6.5特性:
http://communications1.sun.com/r/c/r?2.1.3J1.2U2.11J8XW.CCDJGu..T.Ffac.2CRg.DPHKEXQ0
NetBeans IDE 6.5指南和文档:
http://communications1.sun.com/r/c/r?2.1.3J1.2U2.11J8XW.CCDJGu..T.Ffae.2CRg.DPMeEXS0
指南视频:
http://communications1.sun.com/r/c/r?2.1.3J1.2U2.11J8XW.CCDJGu..T.Ffag.2CRg.DPSSEXU0

关于web方式上传大文件的问题

Filed under: PHP,网站技术 — 江东 @ 2008-11-14 20:36:25 才(5)条评论

最近对web方式上传大文件比较感兴趣,一直在尝试如何通过php上传大文件。不过你放心,cosbeta这篇文章不是告诉你如何修改php.ini中的post_max_size和upload_max_filesize,一来很多虚拟主机不允许你修改php.ini,即使允许修改,也不太可能让你将size修改到100M,同时php的max执行时间也会让你头痛不已,一句话,用php来实现传统方式的大文件上传是不太可能的。

那么如果一定要上传上100M的大文件是不是就一定没有办法了呢,未必,至少cosbeta就认为可以从两个方面来着手解决这个问题,一是客户端辅助,另外一个方式就是利用perl CGI。

客户端辅助方式是采用java applet或者activex辅助,将用户上传的文件在客户端分解成小文件,一个一个上传,然后在服务器端进行组合。当然applet和activeX各有优缺点,applet需要下载JRE,操作本地文件会有安全提示,会对用户体验不好。而activeX仅仅支持IE,这点众所周知。可惜cosbeta不熟悉activeX的编写,也不太喜欢applet,所以放弃了这个想法。

另外一个方法就是perl CGI了,这个网络现成的程序一大堆,所以这里我就不废话了。

今天用perl + ajax解决了带有进度条大文件上传,非常高兴,便记录下来之!

which is better : readfile, fpassthru, or header

Filed under: PHP,电子技术,网站技术 — 江东 @ 2008-11-14 17:08:16 才(7)条评论

有这样一个需求摆在眼前:

  1. web服务器上有很多文件要提供给用户下载;
  2. 必须隐藏文件真实的url,防止盗链和未授权的下载;
  3. 不要太占用CPU资源

于是有朋友提出解决方法如下(假设代码在download.php文件中):

  1. 直接header(“location:src”);
  2. 通过php readfile
  3. 采用fpassthru读取文件然后输出

当然,我们知道,采用header是无法加密文件真实路径的,在某些客户端中,真实的路径会被完全重定向输出的,所以第一个方案无效。第二个和第三个方案是可行的,我们完全可以通过.htaccess控制访问文件所在的目录,所以对于保密和授权的需求来说是完全满足的,但是有一个问题,这两种方案会很占用CPU资源么?特别是读取上百兆的文件的时候?

Readfile_vs_include告诉我们,include文件和readfile对于内存和CPU时间的占用没有丝毫差别,所以采用readfile是可行的,下面引用的表格为证: (read on …)

尝试重口味风格

Filed under: PHP,网站技术 — 江东 @ 2008-11-08 18:06:09 才(7)条评论

bloggermap闲来无事,把这个blog的风格修改修改了。清单的口味产生了审美疲劳,决定尝试重口味了。

本次改版坚持一下几个原则:

  1. 精简CSS和Javascript
  2. 采用google的ajax库,让页面载入速度更快;
  3. 统一化编写模板方便移植,也就是说方便共享出来,这样朋友就不会以为我吝啬而不共享风格了;
  4. 便于扩展,这就是为什么把google ajax集成进来的原因;

呵呵,摆弄摆弄,争取一周之后放出来共享!

对了,目前肯定还有问题,各位朋友如发现问题请帮忙留言,或者给我email,吾将感激不尽!

MySql查询耗时的问题

Filed under: PHP,网站技术 — 江东 @ 2008-09-27 22:00:51 才(9)条评论

感谢bluehost的CPU限制,让我对SQL查询的效率进行无限的追求。这两天CPU老是超标,我仔细查看了日志,我的这个bloggermap也他的一份“功劳”,特别是RSS阅读那一块,一个查询就占据了6秒,再加上其他几个合租伙伴的“功劳”(已经给他们发送邮件),很容易就超过30s了,所以今天晚上回来继续优化。

首先我们来看看这段关于MySQL查询的分析

# Query_time: 4 Lock_time: 0 Rows_sent: 10 Rows_examined: 74584
use sevtiger_bloggermap;
SELECT sample_blogs.id blogid,
sample_blogs.url blogurl,
sample_blogs.feedurl feedurl,
sample_blogs.name blogname,
sample_article.id id,
sample_article.title title,
sample_article.content content,
sample_article.description description,
sample_article.link link,
sample_article.author author,
sample_article.timestamp timestamp
FROM sample_article LEFT JOIN sample_blogs ON sample_blogs.id = sample_article.blogid WHERE 1 ORDER BY sample_article.timestamp DESC LIMIT 17800,10

整个查询耗时4秒,查询涉及到的行数有74584,实际输出10行,我们可以看到,整个查询的效率并不高。 (read on …)