php 自动加载函数 __autoload()
php 自动加载函数 __autoload()
PHP在魔术函数__autoload()方法出现以前,如果你要在一个程序文件中实例化100个对象,那么你必须用include或者require包含进来100个类文件,或者你把这100个类定义在同一个类文件中——相信这个文件一定会非常大。
但是__autoload()方法出来了,以后就不必为此大伤脑筋了,这个类会在你实例化对象之前自动加载制定的文件。
下边我们通过一个例子来看一下,具体的使用方法,并在稍后说明使用PHP魔术函数__autoload应该注意些什么。
class ClassA{
public function __construct(){
echo "ClassA load success!";
}
}
//定义一个类ClassA,文件名为ClassA.php
class ClassA{
public function __construct(){
echo "ClassA load success!";
}
}
class ClassB extends ClassA {
public function __construct(){
//parent::__construct();
echo "ClassB load success!";
}
}
//定义一个类ClassB,文件名为ClassB.php,ClassB继承ClassA
class ClassB extends ClassA {
public function __construct(){
//parent::__construct();
echo "ClassB load success!";
}
}
定义两个测试用的类之后,我们来编写一个含有__autoload()方法的PHP运行程序文件如下:
function __autoload($classname){
$classpath="./".$classname.'.php';
if(file_exists($classpath)){
require_once($classpath);
}
else{
echo 'class file'.$classpath.'not found!';
}
}
$newobj = new ClassA();
$newobj = new ClassB();
这个文件的运行是一点问题都没有的,可见autoload是多么的好用啊,呵呵……
但是不得不提醒你一下几个方面是必须要注意的。
1、如果类存在继承关系(例如:ClassB extends ClassA),并且ClassA不在ClassB所在目录
利用__autoload魔术函数实例化ClassB的时候就会受到一个致命错误:
Fatal error: Class ‘Classd’ not found in ……ClassB.php on line 2,
解决方法:把所有存在extends关系的类放在同一个文件目录下,或者在实例化一个继承类的时候在文件中手工包含被继承的类;
2、另外一个需要注意的是,类名和类的文件名必须一致,才能更方便的使用魔术函数__autoload;
其他需要注意的事情:
3、在CLI模式下运行PHP脚本的话这个方法无效;
4、如果你的类名称和用户的输入有关——或者依赖于用户的输入,一定要注意检查输入的文件名,例如:.././这样的文件名是非常危险的。
或者你还对:PHP魔术函数__call()感兴趣!
PHP用socket模拟post之fsocketopen地听说这个功能需求的时候,立即就蒙了,不骗大家!首先PHP的socket几乎都没使用过,其次没有听说过post还能用PHP的socket来模拟的呢!后来找了个案例看了看,才明白其实没有那么高深,只不过战地还不清楚post的原理和本质而已,其实本质就是发送给目的程序一个标志为post的协议串如下:
POST /目的程序 HTTP/1.1
Accept: */*
Accept-Language: zh-cn,en-us;q=0.5
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; .NET CLR 1.0.3705; .NET CLR 1.1.4322)
Host: 要发送到的主机地址
Content-Length: 发送数据的长度
Pragma: no-cache
Cache-Control: no-cache
username=php&password=iask //post发送的数据
我想大家对form的post方法应该是最熟悉不过了,例如我们想吧用户名和密码发送给某个页面的时候,点击有两个文本域的表单的提交按钮,这个表单发送到action程序的就是以上数据。知道了这一点我想就不难了。
这时候我们只需要用php的socket打开一个端口,例如80端口,把以上信息利用这个端口发送给目的程序就行了。
我们如何在一个端口上建立一个socket信道呢?
在PHP中是如此简单呢!
fsocketopen(主机名称,端口号码,错误号的接受变量,错误提示的接受变量,超时时间)
主机名称就是你需要发送数据的目的地;
端口号就是这个目的程序会在哪个端口等着你的数据;
错误号的接受变量,这个是如果建立socket不成功的时候返回的错误编号;
错误提示的变量,是错误的时候返回的错误提示信息;
超时时间,就是post数据之后如果对方没有回应信息,等待的最长时间。
如果不出意外(你正确的设置fsocketopen()函数的参数)的话,一个socket信道现在已经打开了,我们下一步需要做的就是,通过这个打开的信道把post请求协议发给目的程序,这时候可以使用fwrite或者fputs函数中的任意一个,把post的请求格式发给fsocketopen()打开的句柄,这时候一个伟大的socket模拟的post请求就诞生了。顺便说一下啊:
你发送的时候可不能把我的post请求格式直接ctrl + V过去,你没看见里面的汉字等你自己去填写的吗?
以上是文字的描述,如果大家觉得说的非常垃圾,非常没有说服力的话,下边有一个现成的程序片段,大家可以看看。
$port = $url['port'] ? $url['port'] : 80;
$fp = fsockopen($url['host'], $port, $errno, $errstr,10);
if (!$fp) return "在主机: $url[host] $port 打开socket失败,失败原因是: $errno - $errstr";
fputs($fp, sprintf("POST %s%s%s HTTP/1.0rn", $url['path'], $url['query'] ? "?" : "", $url['query']));
fputs($fp, "Host:".$url['host']."rn");
fputs($fp, "Content-type: application/x-www-form-urlencodedrn");
fputs($fp, "Content-length: " . strlen($encoded) . "rn");
fputs($fp, "Connection: closernrn");
fputs($fp, "$encoded ");
对了还是顺便说一下吧,fgets($fp,1024);这个可以得到返回值的哦!!已经有不止一个人问过我咋接受返回了!!
您好y'all我是比较新的PHP的,请原谅我的愚蠢。
我目前正在与开关,我是想知道如何 - 如果可能的话在所有 - 添加到同一页上第二个变量。例如
我希望能到我的浏览器类型是:
php?scs=blah">www.mysite.com/index.php?scs=blah
并获得了我的网站的某些部分。同样地,我想类型:
www.mysite.com/index.php?atp=blah
并获得不同的部分。
我已经设定了两个变量,但问题是我有一个默认设置的第一个变量,需要熬夜。开关代码如下
$scs = $_GET['scs'];
@include('pt1.php');
switch($scs){
default:
@include('vm9.php');
break;
case vstr:
@include('vst/v1.php');
break;}$atp = $_GET['atp'];
switch($atp)
{ case credits: @include('atp/credits.php'); break;}
function doSomething(x)
{
if(x === "someString")
{ $("#item").css("background-color","blue");
$("div.items").slideUp("fast");
$("input[checkbox]:checked").hide();
}
}
php 文件上传代码,限制jpg文件
<?php
/* 图片上传类 www.lost63.com原创代码 仅限JPG格式图片 */
class uploadFile
{
var $inputName; //input名称
var $fileName; //文件命名
var $fileProperty; //文件属性
var $fileSize=2097152; //文件大小限制,2M
var $filePath="upload/"; //文件存储路径
function uploadFile($inputName){
$this->inputName=$inputName;
$this->getName(); //取得新的名称
$this->fileSave();
}
//随机名称
private function getName(){
$this->fileName=date("YmdHms").rand(0,9).$this->getProperty();
}
//文件属性,返回后辍名
private function getProperty(){
if($_FILES[$this->inputName]["type"]=="image/pjpeg"||$_FILES[$this->inputName]["type"]=="image/jpeg"){
return ".jpg";
}else{
exit("文件格式不对");
}
}
//文件存储
private function fileSave(){
if($_FILES[$this->inputName]["size"]>$this->fileSize){
exit("文件太大,最大限制为".$this->fileSize."字节");
}
if(!file_exists($this->filePath)){
mkdir($this->filePath); //如果文件存储目录不存在,则建立;
}
move_uploaded_file($_FILES[$this->inputName]["tmp_name"],
$this->filePath.$this->fileName);
}
}
if($_GET['action']=="fileSave"){
$f=new uploadFile("file");
echo '<input name="textfield" type="text" size="30" value="'.$f->filePath.$f->fileName.'" /> 上传成功! <a href="'.$f->filePath.$f->fileName.'">浏览</a>';
}else{
echo '<form action="?action=fileSave" method="post" enctype="multipart/form-data" name="form1" id="form1">
<input type="file" name="file" size="30" />
<input type="submit" name="Submit" value="提交" />
</form>';
}
?>
php 加水印 等比例缩放程序
function watermark($desImg,$waterImg,$positon=1,$saveas=false,$alpha=30)
011 {
012 //获取目图片的基本信息
013 $temp=pathinfo($desImg);
014 $name=$temp["basename"];//<SPAN class=t_tag onclick=tagshow(event) href="tag.php?name=%CE%C4%BC%FE">文件</SPAN>名
015 $path=$temp["dirname"];//文件所在的文件夹
016 $extension=$temp["extension"];//文件扩展名
017 if($saveas)
018 {
019 //需要另存为
020 $name=rtrim($name,".$extension")."_2.";//重新命名
021 $savepath=$path."/".$name.$extension;
022 }
023 else
024 {
025 //不需要另存为则覆盖原图
026 $savepath=$path."/".$name;
027 }
028 $info=getImageInfo($desImg);//获取目标图片的信息
029 $info2=getImageInfo($waterImg);//获取水印图片的信息
030
031 $desImg=create($desImg);//从原图创建
032 $waterImg=create($waterImg);//从水印图片创建
033 //位置1:顶部居左
034 if($positon==1)
035 {
036 $x=0;
037 $y=0;
038 }
039 //位置2:顶部居右
040 if($positon==2)
041 {
042 $x=$info[0]-$info2[0];
043 $y=0;
044 }
045 //位置3:居中
046 if($positon==3)
047 {
048 $x=($info[0]-$info2[0])/2;
049 $y=($info[1]-$info2[1])/2;
050 }
051 //位置4:底部居左
052 if($positon==4)
053 {
054 $x=0;
055 $y=$info[1]-$info2[1];
056 }
057 //位置5:底部居右
058 if($positon==5)
059 {
060 $x=$info[0]-$info2[0];
061 $y=$info[1]-$info2[1];
062 }
063 imagecopymerge($desImg,$waterImg,$x,$y,0,0,$info2[0],$info2[1],$alpha);
064 imagejpeg($desImg,$savepath);
065 imagedestroy($desImg);
066 imagedestroy($waterImg);
067 return $savepath;
068 }
069 /**
070 * 获取图片的信息,width,height,image/type
071 * @param string $src 图片路径
072 * @return <SPAN class=t_tag onclick=tagshow(event) href="tag.php?name=%CA%FD%D7%E9">数组</SPAN>
073 * **/
074 function getImageInfo($src)
075 {
076 return getimagesize($src);
077 }
078 /**
079 * 创建图片,返回资源类型
080 * @param string $src 图片路径
081 * @return resource $im 返回资源类型
082 * **/
083 function create($src)
084 {
085 $info=getImageInfo($src);
086 switch ($info[2])
087 {
088 case 1:
089 $im=imagecreatefromgif($src);
090 break;
091 case 2:
092 $im=imagecreatefromjpeg($src);
093 break;
094 case 3:
095 $im=imagecreatefrompng($src);
096 break;
097 }
098 return $im;
099 }
100 /**
101 * 缩略图主函数
102 * @param string $src 图片路径
103 * @param int $w 缩略图宽度
104 * @param int $h 缩略图高度
105 * @return mixed 返回缩略图路径
106 * **/
107
108 function resize($src,$w,$h)
109 {
110 $temp=pathinfo($src);
111 $name=$temp["basename"];//文件名
112 $dir=$temp["dirname"];//文件所在的文件夹
113 $extension=$temp["extension"];//文件扩展名
114 $savepath="{$dir}/{$name}.thumb.jpg";//缩略图保存路径,新的文件名为*.thumb.jpg
115
116 //获取图片的基本信息
117 $info=getImageInfo($src);
118 $width=$info[0];//获取图片宽度
119 $height=$info[1];//获取图片高度
120 $per1=round($width/$height,2);//计算原图长宽比
121 $per2=round($w/$h,2);//计算缩略图长宽比
122
123 //计算缩放比例
124 if($per1>$per2||$per1==$per2)
125 {
126 //原图长宽比大于或者等于缩略图长宽比,则按照宽度优先
127 $per=$w/$width;
128 }
129 if($per1<$per2)
130 {
131 //原图长宽比小于缩略图长宽比,则按照高度优先
132 $per=$h/$height;
133 }
134 $temp_w=intval($width*$per);//计算原图缩放后的宽度
135 $temp_h=intval($height*$per);//计算原图缩放后的高度
136 $temp_img=imagecreatetruecolor($temp_w,$temp_h);//创建画布
137 $im=create($src);
138 imagecopyresampled($temp_img,$im,0,0,0,0,$temp_w,$temp_h,$width,$height);
139 if($per1>$per2)
140 {
141 imagejpeg($temp_img,$savepath);
142 return addBg($savepath,$w,$h,"w");
143 //宽度优先,在缩放之后高度不足的情况下补上背景
144 }
145 if($per1==$per2)
146 {
147 imagejpeg($temp_img,$savepath);
148 return $savepath;
149 //等比缩放
150 }
151 if($per1<$per2)
152 {
153 imagejpeg($temp_img,$savepath);
154
155 return addBg($savepath,$w,$h,"h");
156 //高度优先,在缩放之后宽度不足的情况下补上背景
157 }
158 }
159 /**
160 * 添加背景
161 * @param string $src 图片路径
162 * @param int $w 背景图像宽度
163 * @param int $h 背景图像高度
164 * @param String $first 决定图像最终位置的,w 宽度优先 h 高度优先 wh:等比
165 * @return 返回加上背景的图片
166 * **/
167 function addBg($src,$w,$h,$fisrt="w")
168 {
169 $bg=imagecreatetruecolor($w,$h);
170 $white = imagecolorallocate($bg,255,255,255);
171 imagefill($bg,0,0,$white);//填充背景
172
173 //获取目标图片信息
174 $info=getImageInfo($src);
175 $width=$info[0];//目标图片宽度
176 $height=$info[1];//目标图片高度
177 $img=create($src);
178 if($fisrt=="wh")
179 {
180 //等比缩放
181 return $src;
182 }
183 else
184 {
185 if($fisrt=="w")
186 {
187 $x=0;
188 $y=($h-$height)/2;//垂直居中
189 }
190 if($fisrt=="h")
191 {
192 $x=($w-$width)/2;//水平居中
193 $y=0;
194 }
195 imagecopymerge($bg,$img,$x,$y,0,0,$width,$height,100);
196 imagejpeg($bg,$src);
197 imagedestroy($bg);
198 imagedestroy($img);
199 return $src;
200 }
201
202 }
相关文章
- eval函数在php中是一个函数并不是系统组件函数,我们在php.ini中的disable_functions是无法禁止它的,因这他不是一个php_function哦。 eval()针对php安全来说具有很...2016-11-25
- 在php中eval是一个函数并且不能直接禁用了,但eval函数又相当的危险了经常会出现一些问题了,今天我们就一起来看看eval函数对数组的操作 例子, <?php $data="array...2016-11-25
Python astype(np.float)函数使用方法解析
这篇文章主要介绍了Python astype(np.float)函数使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-08- 这篇文章主要介绍了Python中的imread()函数用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-16
- 本文主要介绍了C# 中取绝对值的函数。具有很好的参考价值。下面跟着小编一起来看下吧...2020-06-25
- 下面小编就为大家带来一篇C#学习笔记- 随机函数Random()的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
- CREATE FUNCTION ChangeBigSmall (@ChangeMoney money) RETURNS VarChar(100) AS BEGIN Declare @String1 char(20) Declare @String2 char...2016-11-25
Android开发中findViewById()函数用法与简化
findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20- 这篇文章主要介绍了C++中Sort函数详细解析,sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变...2022-08-18
- strstr() 函数搜索一个字符串在另一个字符串中的第一次出现。该函数返回字符串的其余部分(从匹配点)。如果未找到所搜索的字符串,则返回 false。语法:strstr(string,search)参数string,必需。规定被搜索的字符串。 参数sea...2013-10-04
PHP函数分享之curl方式取得数据、模拟登陆、POST数据
废话不多说直接上代码复制代码 代码如下:/********************** curl 系列 ***********************///直接通过curl方式取得数据(包含POST、HEADER等)/* * $url: 如果非数组,则为http;如是数组,则为https * $header:...2014-06-07- Foreach 函数(PHP4/PHP5)foreach 语法结构提供了遍历数组的简单方式。foreach 仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息。...2013-09-28
- free函数是释放之前某一次malloc函数申请的空间,而且只是释放空间,并不改变指针的值。下面我们就来详细探讨下...2020-04-25
- PHP 函数 strip_tags 提供了从字符串中去除 HTML 和 PHP 标记的功能,该函数尝试返回给定的字符串 str 去除空字符、HTML 和 PHP 标记后的结果。由于 strip_tags() 无法实际验证 HTML,不完整或者破损标签将导致更多的数...2014-05-31
SQL Server中row_number函数的常见用法示例详解
这篇文章主要给大家介绍了关于SQL Server中row_number函数的常见用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-12-08php的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法
最近遇到一个问题,就是在使用php的mail函数发送utf-8编码的中文邮件时标题出现乱码现象,而邮件正文却是正确的。最初以为是页面编码的问题,发现页面编码utf-8没有问题啊,找了半天原因,最后找到了问题所在。 1.使用 PEAR 的...2015-10-21- 下面小编就为大家带来一篇C#中加载dll并调用其函数的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
- 这篇文章主要介绍了C#虚函数用法,实例分析了C#中虚函数的功能与基本使用技巧,需要的朋友可以参考下...2020-06-25
PHP编码转换函数mb_convert_encoding与iconv用法
文章来实现一个PHP编码转换函数mb_convert_encoding与iconv用法,希望例子能帮助到各位。 将一个短信接口代码从apache迁移到nginx+php-fpm后,发现无法发出短信了,查...2016-11-25WM_CLOSE、WM_DESTROY、WM_QUIT及各种消息投递函数详解
这篇文章主要介绍了WM_CLOSE、WM_DESTROY、WM_QUIT及各种消息投递函数,有助于读者更好的理解windows程序的消息机制,需要的朋友可以参考下...2020-04-25