PHP判断远程图片或文件或url是否存在
例子一
代码如下 | 复制代码 |
//判断远程文件 return $found; |
当然也有很多其它方法,或多或少有些限制和缺陷,如:
(1)使用fopen()函数,它要在allow_url_open开启的状态下,否则会报错。
代码如下 | 复制代码 |
$url = 'http://www.111cn.net /img/qrcode_for_phpddt.JPG'; if(@fopen($url, 'r')) { echo '文件存在'; } else { echo '文件不存在'; } |
(2)get_headers取得服务器响应一个 HTTP 请求所发送的所有标头,效率较低,你可以测试下。
代码如下 | 复制代码 |
$url = 'http://www.111cn.net /img/qrcode_for_phpddt.JPG'; |
(3)file_get_contents()函数
代码如下 | 复制代码 |
$opts = array( 'http'=>array( 'timeout'=>3, ) ); $context = stream_context_create($opts); $resource = @file_get_contents('http://www.111cn.net /img/qrcode_for_phpddt.JPG', false, $context); if($resource) { echo '文件存在'; } else { echo '文件不存在'; } |
参考资料:fopen函数用法
参数 | 描述 |
---|---|
filename | 必需。规定要打开的文件或 URL。 |
mode | 必需。规定要求到该文件/流的访问类型。可能的值见下表。 |
include_path | 可选。如果也需要在 include_path 中检索文件的话,可以将该参数设为 1 或 TRUE。 |
context | 可选。规定文件句柄的环境。Context 是可以修改流的行为的一套选项。 |
mode 参数的可能的值
mode | 说明 |
---|---|
"r" | 只读方式打开,将文件指针指向文件头。 |
"r+" | 读写方式打开,将文件指针指向文件头。 |
"w" | 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。 |
"w+" | 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。 |
"a" | 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。 |
"a+" | 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。 |
"x" |
创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。 这和给底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。 此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。 |
"x+" |
创建并以读写方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。 这和给底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。 此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件 |
代码如下 | 复制代码 |
index.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>无标题文档</title> <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script> <script> var chat = { init:function(){ chat.first(); $('#chat_btn').unbind('click').click(function(){ chat.send(); }); $('#my_chat').keyup(function(){ if(event.keyCode == 13){ chat.send(); } }); www.111cn.net }, first:function(){ $.getJSON('data.php',{ action:'first', type:'l' },function(data){ chat.btn_status._true(); $('#mwebtime').html(data.time); $('#chat textarea').val(data.chat); $('#chat textarea').stop(true,true).animate({scrollTop:9999}, 1); chat.socket(); }); }, send:function(){ chat.btn_status._false(); $.getJSON('send.php',{ txt:$('#my_chat').val(), type:'l' },function(data){ if(data.status==200){ chat.btn_status._false(); $('#my_chat').val(''); setTimeout(function(){ chat.btn_status._true(); },2000); } }); }, socket:function(){ $.getJSON('data.php',{ action:'while', type:'l' },function(data){ $('#mwebtime').html(data.time); $('#chat textarea').val(data.chat); $('#chat textarea').stop(true,true).animate({scrollTop:9999}, 1); chat.socket(); }); }, btn_status:{ _false:function(){ $('#chat_btn').html('等待').attr('disabled',true); }, _true:function(){ $('#chat_btn').html('发言').attr('disabled',false); } } } chat.init(); </script> </head> <body> <div id="chat"> <textarea wrap="physical" style="line-height:20px;font-size:12px;height:100px;width:200px;"></textarea> <BR /> <input id="my_chat" type="text" /> <button id="chat_btn" disabled="disabled">发言</button> </div> <div id="mwebtime"></div> </body> </html> data.php <?php header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT"); header("Cache-Control: no-cache, must-revalidate"); header("Pramga: no-cache"); set_time_limit(0); $get = $_GET['action']; $type = $_GET['type']; $file = $type.'.txt'; if(isset($get) && isset($type) && file_exists($file)){ switch($get){ case 'first': $chat = file_get_contents($file); $json=array( 'status' => 200, 'time' => gmdate("s"), 'chat' => $chat, ); echo json_encode($json); break; www.111cn.net case 'while': $oldsize = filesize($file); $newsize = filesize($file); while(true){ if($oldsize!=$newsize){ $chat = file_get_contents($file); $json=array( 'status' => 200, 'time' => gmdate("s"), 'chat' => $chat, ); echo json_encode($json); exit; } clearstatcache(); $newsize = filesize($file); usleep(10000); } break; } } ?> send.php <?php $json = array(); $txt = isset($_GET['txt'])?$_GET['txt']:''; $type = isset($_GET['type'])?$_GET['type']:''; if($txt!=''){ $file = $type.".txt"; if(file_exists($file)){ $fp = fopen($file,"a"); $str = "rn".'Admin:'.$txt; //$str = $txt."n"//linux; fwrite($fp, $str); fclose($fp); $json['status']=200; echo json_encode($json); exit; } } ?> |
当我们使用phpMyAdmin导入备份的数据库文件时,默认只能上传小于2M的文件。但是通常我们的数据库备份文件是大于2M的,怎么办呢?其实我们只需修改一下php.ini文件中的一个参数即可。
解决办法一,有服务器修改权限
以使用USBWebserver搭建的WAMP环境为例,php.ini文件存在于两个地方:USBWebserversettings和USBWebserver 8php。
编辑php.ini,在其中找到:
代码如下 | 复制代码 |
upload_max_filesize = 2M |
把2M增加到20M或更大的数值即可。
保存文件,最后重启USBWebserver,或者说重新运行Mysql,就可以发现最大限制已经增大为……
慢着,竟然不是20M,而是8M。如图:
三好公民也不知道是什么原因,反正暂时够用就行了。有知道的,请给三好公民讲解一下,谢谢!
解决方法二,如果没有服务器修改权限我们只要另想办法了
代码如下 | 复制代码 |
define("TOKEN", "xingans"); $wechatObj = new wechatCallbackapiTest(); $wechatObj->responseMsg(); class wechatCallbackapiTest { //签名验证公共接口 public function valid() { $echoStr = $_GET["echostr"]; if($this->checkSignature()){ echo $echoStr; exit; } } //主入口处理函数 public function responseMsg() { $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; if (!empty($postStr)){ $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); $msgType=trim($postObj->MsgType); switch($msgType){ case 'text': $resultStr=$this->handleText($postObj); break; case 'event': $resultStr=$this->handleEvent($postObj); break; default: $resultStr=$this->handleDefault($postObj); break; } echo $resultStr; }else { echo "Error"; exit; } } //处理文本消息 private function handleText($obj){ $keyword=trim($obj->Content); if(preg_match('/天气/',$keyword)){ $contentStr=$this->handleWeather($obj); }elseif(preg_match('/翻译/',$keyword)){ $contentStr=$this->handleTranslation($obj); }else{ $contentStr=$this->handleChat($obj); } return $this->handleStr($obj,$contentStr); } //处理天气 private function handleWeather($obj){ $keyword=mb_substr($obj->Content,-2,2,'utf-8'); $zone=mb_substr($obj->Content,0,-2,'utf-8'); if($keyword=='天气' && !empty($zone)){ $zoneArr=json_decode(file_get_contents('http://api.k780.com:88/?app=weather.city&format=json'),true); $zoneArr=$zoneArr['result']; $cityId=''; foreach($zoneArr as $value){ if($zone==$value['citynm']){ $cityId=$value['weaid']; break; } } if(!empty($cityId)){ $data=file_get_contents("http://api.k780.com:88/?app=weather.today&weaid=$cityId&appkey=10638&sign=3736578f099375665f9f141a6326b757&format=json"); $data=json_decode($data); $contentStr="今天是:".$data->result->days.",".$data->result-> week.",".$data->result->citynm."天气:".$data->result->weather."n温度:".$data->result->temperature.", ".$data->result->wind_direction.",".$data->result->wind_power.", 最低温度:".$data->result->temp_low.",最高温度:".$data->result->temp_high; }else{ $contentStr='找不到输入的城市!'; } }else{ $contentStr='输入的查询格式不正确!'; } return $contentStr; } //处理翻译 private function handleTranslation($obj){ $keyword=mb_substr($obj->Content,0,2,'utf-8'); $words=mb_substr($obj->Content,2,220,'utf-8'); if($keyword=='翻译' && !empty($words)){ $data=file_get_contents('http://fanyi.youdao.com/openapi.do?keyfrom=zfsblog&key=364295447&type=data&doctype=json&version=1.1&q='.urlencode($words)); $data=json_decode($data,true); switch($data['errorCode']){ case '0': $contentStr=$data['translation'][0]; break; case '20': $contentStr='要翻译的文本过长'; break; case '30': $contentStr='无法进行有效的翻译'; break; case '40': $contentStr='不支持的语言类型'; break; case '50': $contentStr='无效的key'; break; default: $contentStr='Error'; break; } }else{ $contentStr='输入的翻译格式不正确!'; } return $contentStr; } //处理聊天信息 private function handleChat($obj){ $keywords=$obj->Content; $curlPost=array("chat"=>$keywords); $ch = curl_init();//初始化curl curl_setopt($ch, CURLOPT_URL,'http://www.xiaojo.com/bot/chata.php');//抓取指定网页 curl_setopt($ch, CURLOPT_HEADER, 0);//设置header curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上 curl_setopt($ch, CURLOPT_POST, 1);//post提交方式 curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost); $data = curl_exec($ch);//运行curl curl_close($ch); if(!empty($data)){ $contentStr=$data; }else{ $ran=rand(1,5); switch($ran){ case 1: $contentStr= "小九今天累了,明天再陪你聊天吧"; break; case 2: $contentStr= "小九睡觉喽~~"; break; case 3: $contentStr= "呼呼~~呼呼~~"; break; case 4: $contentStr= "你话好多啊,不跟你聊了"; break; case 5: $contentStr= "你话好多啊,不跟你聊了"; break; } } return $contentStr; } //创建自定义菜单 public function createMenu($data,$token){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$token); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)'); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_AUTOREFERER, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($ch); curl_close($ch); return $result; } //查询自定义菜单 function getMenu($token){ $url="https://api.weixin.qq.com/cgi-bin/menu/get?access_token=$token"; $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER,true) ; //获取数据返回 curl_setopt($ch, CURLOPT_BINARYTRANSFER,true) ; //在启用 CURLOPT_RETURNTRANSFER 时候将获取数据返回 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,false); return $output = curl_exec($ch); } //删除自定义菜单 public function deleteMenu($token){ $url="https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=".$token; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); $result = curl_exec($ch); curl_close($ch); return $result; } //处理事件消息 private function handleEvent($obj){ $content=''; switch($obj->Event){ case 'subscribe': $content.="welcome-欢迎关注该公众号号!"; break; case 'unsubscribe': $content.="感谢您一直以来对该公众号的关注,再见!"; break; default: $content.=""; break; } return $this->handleStr($obj,$content); } //处理回复消息字符串 private function handleStr($obj,$content='',$flag=0){ $textTpl = " return sprintf($textTpl, $obj->FromUserName, $obj->ToUserName, time(), $content,$flag); } //签名验证函数 private function checkSignature() { $signature = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; $token = TOKEN; $tmpArr = array($token, $timestamp, $nonce); sort($tmpArr, SORT_STRING); $tmpStr = implode( $tmpArr ); $tmpStr = sha1( $tmpStr ); if( $tmpStr == $signature ){ return true; }else{ return false; } } } ?> |
测试结果:
reset (PHP 3, PHP 4, PHP 5)
函数定义 mixed reset ( array &array )
作用:该函数将 array 的内部指针倒回到第一个单元并返回第一个数组单元的值,如果数组为空则返回 FALSE。例如:
代码如下 | 复制代码 |
<?php $array=array('step one','step two','step three','step four'); echo reset($array); |
//输出:step one
next (PHP 3, PHP 4, PHP 5)
函数定义 mixed next ( array &array )
作用:返回数组内部指针指向的下一个单元的值,或当没有更多单元时返回 FALSE。例如:
代码如下 | 复制代码 |
<?php |
//输出:step two
警告:如果数组包含空的单元,或者单元的值是 0 则本函数碰到这些单元也返回 FALSE。要正确遍历可能含有空单元或者单元值为 0 的数组,参见 each() 函数。
current (PHP 3, PHP 4, PHP 5)
函数定义 mixed current ( array &array )
作用:返回当前被内部指针指向的数组单元的值,并不移动指针。初始指向插入到数组中的第一个单元。如果内部指针指向超出了单元列表的末端,current() 返回 FALSE。
警告:如果数组包含有空的单元(0 或者 "",空字符串)则本函数在碰到这个单元时也返回 FALSE。这使得用 current() 不可能判断是否到了此数组列表的末端。要正确遍历可能含有空单元的数组,用 each() 函数。
next() 和 current() 的行为类似,只有一点区别,在返回值之前将内部指针向前移动一位。这意味着它返回的是下一个数组单元的值并将数组指针向前移动了一位。如果移动指针的结果是超出了数组单元的末端,则 next() 返回 FALSE。
下面是相关函数的使用例子:
代码如下 | 复制代码 |
<?php |
相关文章
- 下面小编来给大家演示几个php操作zip文件的实例,我们可以读取zip包中指定文件与删除zip包中指定文件,下面来给大这介绍一下。 从zip压缩文件中提取文件 代...2016-11-25
使用PHP+JavaScript将HTML页面转换为图片的实例分享
这篇文章主要介绍了使用PHP+JavaScript将HTML元素转换为图片的实例分享,文后结果的截图只能体现出替换的字体,也不能说将静态页面转为图片可以加快加载,只是这种做法比较interesting XD需要的朋友可以参考下...2016-04-19Jupyter Notebook读取csv文件出现的问题及解决
这篇文章主要介绍了JupyterNotebook读取csv文件出现的问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2023-01-06- 本篇文章主要分享了通过window.navigator来判断浏览器及其版本信息的实例代码。具有一定的参考价值,下面跟着小编一起来看下吧...2017-01-23
- php如何实现抓取网页图片,相较于手动的粘贴复制,使用小程序要方便快捷多了,喜欢编程的人总会喜欢制作一些简单有用的小软件,最近就参考了网上一个php抓取图片代码,封装了一个php远程抓取图片的类,测试了一下,效果还不错分享...2015-10-30
- 这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
- 今天小编在这里就来给各位Photoshop的这一款软件的使用者们来说说把古装美女图片转为细腻的工笔画效果的制作教程,各位想知道方法的使用者们,那么下面就快来跟着小编一...2016-09-14
- 这篇文章主要介绍了Python 图片转数组,二进制互转操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-09
- 有时我们接受或下载到的PSD文件打开是空白的,那么我们要如何来解决这个 问题了,下面一聚教程小伙伴就为各位介绍Photoshop打开PSD文件空白解决办法。 1、如我们打开...2016-09-14
- 下面小编就为大家带来一篇利用JS实现点击按钮后图片自动切换的简单方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-10-25
- C#使用System.IO中的文件操作方法在Windows系统中处理本地文件相当顺手,这里我们还总结了在Oracle中保存文件的方法,嗯,接下来就来看看整理的C#操作本地文件及保存文件到数据库的基本方法总结...2020-06-25
- 这篇文章主要介绍了解决python 使用openpyxl读写大文件的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-13
- 这篇文章主要介绍了C#实现HTTP下载文件的方法,包括了HTTP通信的创建、本地文件的写入等,非常具有实用价值,需要的朋友可以参考下...2020-06-25
jquery左右滚动焦点图banner图片鼠标经过显示上下页按钮
jquery左右滚动焦点图banner图片鼠标经过显示上下页按钮...2013-10-13- 这篇文章主要为大家详细介绍了SpringBoot实现excel文件生成和下载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-09
- 这篇文章主要为大家详细介绍了js实现上传图片及时预览的相关资料,具有一定的参考价值,感兴趣的朋友可以参考一下...2016-05-09
php无刷新利用iframe实现页面无刷新上传文件(1/2)
利用form表单的target属性和iframe 一、上传文件的一个php教程方法。 该方法接受一个$file参数,该参数为从客户端获取的$_files变量,返回重新命名后的文件名,如果上传失...2016-11-25- 使用 conditional comment 来判断 IE 的版本。嗯,是早早有人提出,但没有认真看代码。昨天刚好在看 CSS3 PIE 的时候看到,觉得是不是不靠谱。今天看到 Paul Irish 也提起,那么,推荐一下吧。这是作者博客上写的:复制代码 代码...2014-05-31
- Photoshop的这一款软件小编相信很多的人都已经是使用过了吧,那么今天小编在这里就给大家带来了用Photoshop软件制作枪战电影海报的教程,想知道制作步骤的玩家们,那么下面...2016-09-14
- 要替换字符串中的内容我们只要利用php相关函数,如strstr,str_replace,正则表达式了,那么我们要替换目录所有文件的内容就需要先遍历目录再打开文件再利用上面讲的函数替...2016-11-25