read_exif_data
(PHP 4 )
read_exif_data -- Reads header information stored in TIFF and JPEG images
Description
array exif_read_data ( string filename, string sections, bool arrays, bool thumbnail)
Note: The read_exif_data() function is an alias for exif_read_data().
See also exif_thumbnail().
User Contributed Notes
read_exif_data
inq@inq.dhs.org
03-Jan-2001 03:52
Each of my jpeg files are over 1 meg, and read_exif_data seems to read the
whole file and its very slow. So I wrote a function to read only the
beginning of each file:
function read_exif_data_quick($path) {
$tmpfile = "/tmp/read_exif_data_quick.tmp_file";
$in = fopen($path, "r");
$out = fopen($tmpfile,"w");
fwrite( $out, fread( $in, 15000 ) );
fclose($in);
fclose($out);
return read_exif_data($tmpfile);
}
And so far it works for all of my jpegs (taken with my digital camera).
garbage@sunflowerroad.com
06-Jul-2001 05:33
I started drooling when I saw that php could read the exif information
automatically for me. Then I found out that read_exif_data is NOT
compiled into the standard win32 build (think about including it please!).
To get around this I found the following program that runs from the
command line and works really well.
its actually a set of utilities that will even allow you to put exif data
into images.
Its freeware, but the license says no commercial use without written
permission.
http://www.users.bigpond.com/hughthomas/exif.html
garbage@sunflowerroad.com
06-Jul-2001 05:34
By the way, it works under linux or win32
ibaldin@anr.mcnc.org
21-Aug-2001 11:43
Perl Image::Info module is capable of reading EXIF tags (places them into
an associative array). You can write a simple script to use the module and
it will extract all or only required tags out of a jpeg file.
用 PHP 实现 POP3 邮件的解码(1)
初步认识邮件的源文件
本文简要说明了通过POP3协议收取邮件、MIME邮件的解码的原理;针对收取和MIME解码,提供了两个实用的PHP类,并提供了使用的样例。分为邮件收取、MIME解码两个部分。我们已经向您介绍过了邮件的收取,现在让我们来为您介绍本文的解码部。
在上一篇里,我们已经完成了一个用PHP通过POP3收取邮件的实例,可是在使用这个类的时候,相信你已经看到了,很多的邮件收下来是一堆乱码,自己根本看不懂!是的。现在的邮件大部分都已经经过了编码,需要一个解码的过程才能变成我们习惯的文字、图片、或是其它的附件。
邮件的源文件
首先,我们来看一段简单的邮件的源文件:(在Foxmail中,选中邮件,点选“查看源文件”就会看到这样的些内容了)
From:
To:
Subject: =?gb2312?B?xOO6w6Oh?=
Date: Sun, 8 Oct 2000 20:28:45 +0800
MIME-Version: 1.0
Content-Type: multipart/alternative;
boundary="----=_NextPart_000_0007_01C03166.5B1E9510"
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 5.00.2919.6700
X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2919.6700
This is a multi-part message in MIME format.
------=_NextPart_000_0007_01C03166.5B1E9510
Content-Type: text/plain;
charset="gb2312"
Content-Transfer-Encoding: base64
w7vT0MLSwuuwyaO/DQo=
------=_NextPart_000_0007_01C03166.5B1E9510
Content-Type: text/html;
charset="gb2312"
Content-Transfer-Encoding: base64
PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwv
L0VOIj4NCjxIVE1MPjxIRUFEPg0KPE1FVEEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWdi
MjMxMiIgaHR0cC1lcXVpdj1Db250ZW50LVR5cGU+DQo8TUVUQSBjb250ZW50PSJNU0hUTUwgNS4w
MC4yOTIwLjAiIG5hbWU9R0VORVJBVE9SPg0KPFNUWUxFPjwvU1RZTEU+DQo8L0hFQUQ+DQo8Qk9E
WSBiZ0NvbG9yPSNmZmZmZmY+DQo8RElWPjxGT05UIHNpemU9Mj7Du9PQwtLC67DJo788L0ZPTlQ+
PC9ESVY+PC9CT0RZPjwvSFRNTD4NCg==
PHP 中的类:邮件群发
本类可以用与于email的群发,测试的环境是linux,系统需要安装sendmail才能使用
if ( ! defined( MAIL_CLASS_DEFINED ) ) {
define(MAIL_CLASS_DEFINED, 1 );
class email {
function email ( $subject, $message, $senderName, $senderEmail, $toList, $ccList=0, $bccList=0, $replyTo=0) {
$this->sender = $senderName . " <$senderEmail>";
$this->replyTo = $replyTo;
$this->subject = $subject;
$this->message = $message;
// 定义收件人
if ( is_array($toList) ) {
$this->to = join( $toList, "," );
} else {
$this->to = $toList;
}
// 定义抄送名单
if ( is_array($ccList) && sizeof($ccList) ) {
$this->cc = join( $ccList, "," );
} elseif ( $ccList ) {
$this->cc = $ccList;
}
// 定义密码抄送名单
if ( is_array($bccList) && sizeof($bccList) ) {
$this->bcc = join( $bccList, "," );
} elseif ( $bccList ) {
$this->bcc = $bccList;
}
}
// 发送函数
// 利用php中的mail()函数发送email
function send () {
//发件人
$this->headers = "From: " . $this->sender . " ";
// 回复地址
if ( $this->replyTo ) {
$this->headers .= "Reply-To: " . $this->replyTo . " ";
}
// 抄送
if ( $this->cc ) {
$this->headers .= "Cc: " . $this->cc . " ";
}
// 秘密抄送
if ( $this->bcc ) {
$this->headers .= "Bcc: " . $this->bcc . " ";
}
return mail ( $this->to, $this->subject, $this->message, $this->headers ); //返回结果
}
}
}
?>
说明:
参数说明
----------
- 以下几个参数是必须的:subject, message, senderName, senderEmail 和 toList
- 这几个参数则是可选的:ccList, bccList 和 replyTo
- toList, ccList 和 bccList 必须是有效的email地址
用 PHP 实现 POP3 邮件的收取(1)
POP协议简介
本文简要说明了通过POP3协议收取邮件、MIME邮件的解码的原理;针对收取和MIME解码,提供了两个实用的PHP类,并提供了使用的样例。分为邮件收取、MIME解码两个部分。这里我们先向您介绍邮件的收取,解码部分会在以后的文章中为各位详细的介绍,敬请关注。
现在Internet上最大的应用应该是非Email莫属了,我们每天都习惯于每天通过Email进行交流,各大网站也几乎都推出了自己的基于WEB的免费邮件系统。在本文里,笔者将介绍一些Email实现的一些原理。同时我们假设你对于PHP的编程有一定的基础,对于TCP/IP协议也有一定的了解。
POP 协议简介
POP的全称是 Post Office Protoco ,即邮局协议,用于电子邮件的接收,现在常 用的是第三版 ,简称为 POP3。通过POP协议,客户机登录到服务器上后,可以对自己的邮件进行删除,或是下载到本地,下载后,电子邮件客户软件就可以在本地对邮件进行修改、删除等。另外一种用于接收信件的邮件是 IMAP 协议,现在发展很快,在本文中,我们暂不讨论。
POP服务器一般使用的是TCP的110号端口,如果你用的是Foxmail的话,在其收邮件的时候,你可以看到其信息提示窗口有这么一些命令:
“正在连接到 62.123.23.123:110";
"USER BOSS_CH";
"PASS..............";
下面让我们来看一段 与 POP3 服务器对话的实录:
telenet pop.china.com 110
+OK AIMC POP service (mail2.china.com) is ready.
USER boss_ch
+OK Please enter password for user .
PASS ******
+OK boss_ch has 1 messages (750 octets)
STAT
+OK 1 750
LIST
+OK 1 messages (750 octets)
1 750
RETR 1
+OK 750 octets
Received: from smtp2.ptt.js.cn([202.102.24.37]) by china.com(JetMail 2.5.3.0)
with SMTP id jm4839cc4227; Sat, 23 Sep 2000 05:31:21 -0000
Received: from chenjunqing ([61.155.120.6]) by smtp2.ptt.js.cn
(Netscape Messaging Server 4.15) with SMTP id G1BRHJ03.V07 for
; Sat, 23 Sep 2000 13:34:31 +0800
Date: Sat, 23 Sep 2000 13:34:18 +0800
From: =?ISO-8859-1?Q?=B3=C2=BF=A1=C7=E5?=
用 PHP 实现 POP3 邮件的收取(3)
应用实例
POP3收取邮件的类在前面的文章中已经给大家做了详细的介绍,下面我们来看看如何应用这个类:
include("pop3.inc.php");
$host="pop.china.com";
$user="boss_ch";
$pass="026007";
$rec=new pop3($host,110,2);
if (!$rec->open()) die($rec->err_str);
echo "open ";
if (!$rec->login($user,$pass)) die($rec->err_str);
echo "login";
if (!$rec->stat()) die($rec->err_str);
echo "共有".$rec->messages."封信件,共".$rec->size."字节大小
";
if ($rec->messages>0)
{
if (!$rec->listmail()) die($rec->err_str);
echo "有以下信件:
";
for ($i=1;$i<=count($rec->mail_list);$i++)
{
echo "信件".$rec->mail_list[$i][num]."大小:".$rec->mail_list[$i][size]."
";
}
$rec->getmail(1);
echo "邮件头的内容:
";
for ($i=0;$ihead);$i++)
echo htmlspecialchars($rec->head[$i])."
n";
echo "邮件正文 :
";
for ($i=0;$ibody);$i++)
echo htmlspecialchars($rec->body[$i])."
n";
}
$rec->close();
?>
如果你把pop3类中的debug设为true的话,你还可以看到程序与pop3服务器是如何对话的,用于正在调试的程序来说,这样显得更为直观。
小结
从以上的这个实例我们可以看到PHP真的是网站开发的一个功能非常强大的工具,但是也可以感觉到,PHP做为一种混合形的语言,其面对对象的开发与其它的工具如java相比还存在不少让人遗憾的地方。这个pop类的实现也还有不少需要改进之处,欢迎各位同仁们指导。
作者:陈俊清
如有想要取得完整的源代码的朋友,请与本人联系:boss_ch@netease.com
转载:中华网
PHP4 调用自己编写的 COM 组件
作者:东方一蛇
搞完了PHP4调用JavaBean,又想去试试调用COM,开始以为很难,自己用VB6写了一个Active Dll在PHP4中调用,马上成功,比调用javabean方便多了,下面讲一下我的步骤。
下载的版本是从http://www.mm4.de/。
一:用VB6写Activex Dll
代码如下:
Option Explicit
Private MyScriptingContext As ScriptingContext
Private MyApplication As Application
Private MyRequest As Request Private MyResponse As Response
Private MyServer As Server
Private MySession As Session Public
Sub OnStartPage(PassedScriptingContext As ScriptingContext)
Set MyScriptingContext = PassedScriptingContext
Set MyApplication = MyScriptingContext.Application
Set MyRequest = MyScriptingContext.Request
Set MyResponse = MyScriptingContext.Response
Set MyServer = MyScriptingContext.Server
Set MySession = MyScriptingContext.Session
End Sub
Public Sub OnEndPage()
Set MyScriptingContext = Nothing
Set MyApplication = Nothing
Set MyRequest = Nothing
Set MyResponse = Nothing
Set MyServer = Nothing
Set MySession = Nothing
End Sub
Public Function Test_Number(num) As Variant
If num < 0 Then Get_Number_Attrib = -1
If num > 0 Then Get_Number_Attrib = 1
If num = 0 Then Get_Number_Attrib = 0
End Function
具体方法如下:新建一个VB6工程,ActiveX Dll将工程命名为P_test,类名为c_test
类的文件内容如上。
编译生成p_test.dll文件
二:注册
提示符下运行:regsvr32 p_test.dll
三:编写php文件,test.php4代码如下:
$b=new COM("p_test.c_test");
$a=$b->Test_Number(-454);
echo $a;
?>
运行php4文件将显示-1
可能遇到的问题是,编译工程时通不过,要将
Microsoft Active Server Pages Object Library
引用进来,具体实现“Project->References”找到改库,并勾上
相比之下,PHP4调用com应该比PHP4调用javabean好哦,因为毕竟是Ms系统嘛。大家也可以去自己编写调用数据库的控件,用PHP4调用,从某种程度上,和PHP调用javabean一样,可以说,实现了“隐藏源代码”。
本文出自:
关于session不能自动去除的临时处理方法(转载)我一直没用SESSI
关于 session 不能自动去除的临时处理方法
问题是:
"PHP 的 session 会一直保存着用户第一次进入时输入的信息,即使你返回到登陆画面重新登陆也不会改变!这个问题我在 php4.02 里面发现,在最新的php 4.03pl1 的测试中仍然没有通过!只有用户关闭 ie 浏览器,重新开 IE窗口才能消除session的内容
临时解决方法:
当表单提交后,不要注册表单提交的变量,把该变量赋给另一变量$X后,注册$X,这样返回到登陆画面重新登陆就可以改变了.再要保险一点,可在登陆的那一页的页首添一句删除变量$X.
举例如下:这段是我的聊天室登陆的部分
1 登陆页面传送 $name , $pass
2 login.php 里可以这样处理
<?
$save_name = $name;
$save_pass = $pass;
session_start();
session_register("name");
session_register("pass");
$name=$save_name;
$pass=$save_pass;
......
?>
如何混合使用XML和PHP?
你必须要关掉 php3.ini 配置中的短标记功能,将short_tags设为 0,或是在Apache配置文件中使用php3_short_tags配置 。(你也可以在区域中使用。) 也可以在脚本中使用short_tags()函数让短标记功能有用或无效。
如何用正则表达式来表示中文
由于中文的ASCII码是有一定的范围的。所以你可以用下面的正则表达式来表示中文。
/^[chr(0xa1)-chr(0xff)]+$/
下面是一个使用的例子:
$str = "超越PHP";
if (preg_match("/^[".chr(0xa1)."-".chr(0xff)."]+$/", $str)) {
echo "这是一个纯中文字符串";
} else {
echo "这不是一个纯中文字串";
}
关于使用session_start出现的headersalreadysent错误的解释
请看详细的错误程序和输出结果
<html>
<?
echo "testing ... ";
session_start();
?>
</html>
输出为
testing ...
Warning: Cannot send session cookie - headers already sent by (output started at F:php2000test.php:2) in F:php2000test.php on line 4
Warning: Cannot send session cache limiter - headers already sent (output started at F:php2000test.php:2) in F:php2000test.php on line 4
分析:
主要原因,php.ini里有关于session 的定义,默认是使用 cookie
[session]
session.use_cookies = 1 ; whether to use cookies
这句表明使用 cookies 存储session 而 cookies的设置必须在正式 htm 之前,也就是只能在 header 里面才行,所以造成这个错误的发生
我们修改程序为
<?
echo "testing ... ";
session_start();
?>
同样错误,因为 echo 已经输出了
我们修改程序为
<?
$i=1;
session_start();
?>
运行正确表明在session_start的前面可以有计算语句,但是不能有输出语句
我尝试过修改
session.use_cookies = 0 ; whether to use cookies
但是没有成功,希望知道答案的朋友通知我,如何去掉cookie方式的 session
为 php4 加入动态 flash 文件的生成的支持
来源:wangzy
想象过在网站上动态生成flash动画吗,本文就让你步入php+flash的激动时代。
php真是个好东西呀,真是无法预料她明天会变的怎样。。。好了,言归正传,下面
介绍怎样实现这个功能。
一、需要的软件
swf的支持库
http://reality.sgi.com/grafica/flash/dist.99.linux.tar.Z
这个包里面有文档,你可以用c来使用它,他的例子就是。
这哥们太好了,不过他要是提供源码就更好了。
还有当然是php4了从http://www.php.net得到
二、安装
1、libswf.a安装
#cp dist.99.linux.tar.Z /usr/local
#tar xvzf dist.99.linux.tar.Z
#cd dist
#make
你会看到例子c程序生成的image.swf和test.swf两个文件,你可以放到浏览器看看结果。
如果出来了,你就完成一半了。
你还需要做一些事情
在/etc/profile中加入
SWFBINPATH=/usr/local/dist/bin
export SWFBINPATH
SWFFONTPATH=/usr/local/dist/fonts
export SWFFONTPATH
2、编译php4
编译加入
--with-swf=/usr/local/dist
笔者在编译的时候发现找不到swf.h错误,用
#cp /usr/local/dist/swf.h /php/src/directory/ext/swf解决问题
安装完后做个如下的脚本(php文档带的例子),请注意当前目录下的swf目录要可
写,不然apache会出错的你什么都会的不到的
执行完后用浏览器调用test.swf文件,你肯定会很惊讶php的威力,呵呵
体会一下程序设计和艺术设计的完美感觉吧,可惜我没有艺术头脑:-(
在/usr/local/dist/bin中有两个程序,imgtofi用来转化rgb,gif,jpg到libswf.a支持的
图形格式,pstoff为把ps字体转化为libswf.a可用的字体,我转化过英文字体,能在程序
中使用,但是没转化成功过中文字体,不知道哪位大虾成功了,能否告之一下。
关于swf的php函数说明,请去php.net找最新的manual。
来源:
PatternModifiers-规则表达式的修饰符(转载)发现PHP里有些正则
Pattern Modifiers - 规则表达式的修饰符
下面是当前规则表达式里可用的修饰. 括号内的名字是那些修饰符的内部 PCRE 名字.
i (PCRE_CASELESS)
如果设置了这个修饰符, 则表达式不区分大小写.
m (PCRE_MULTILINE)
默认的, PCRE 认为目标字符串值是单行字符串 (即使他确实包含多行). 行开始标记 (^) 只匹配字符串的开始部分, 而行结束标记 ($) 只匹配字符串的尾部,或者一个结束行(除非指定 E 修饰符). 这个和 Perl 里面一样.
如果设定了这个修饰符, 行开始和行结束结构分别匹配在目标字符串任何新行的当前位置后面的或者以前的, 和每一个开始和结束一样. 这个等于 Perl 里面的 /m 修饰符. 如果目标字符串没有 "n" 字符, 或者模式里没有 ^ 或 $ ,这个修饰符不起作用.
s (PCRE_DOTALL)
如果设置这个修饰符, 模式里的一个"点"将匹配所有字符, 包括换行. 没有他, 换行将被排除在外. 这个修饰符等同于 Perl 里面的 /s 修饰符. 一个相反的类型,例如 [^a] 将总是匹配换行字符,而不管这个修饰符的限制.
x (PCRE_EXTENDED)
如果设置这个修饰符, 模式里面的空格数句将会被全部忽略,除非用转义符或者一个字符的内部类型,还有所有字符类型外的未转义的 # 号之间的也被忽略. 这个等同于 Perl 里面的 /x 修饰符, 这样可以复杂的模式里面加入注释. 注意,只适用于数据字符. 空格字符将不会在指定的模式字符指定顺序中出现。
e
如果设置这个修饰符, preg_replace() 将在替换值里进行正常的涉及到 的替换, 等