php 检测文件是否存在的几种方式


网页中一些图片获取失败,会显示一个空的图片,影响美观。
 
服务器获取图片地址时,可以先判断图片地址是否有效,如果找不到图片,则返回默认图片地址,判断文件是否存在有多种方式:
  • 图片与项目在同一服务器中,php中 file_exsits 函数可以检查文件是否存在;
  • 使用文件服务器时, 可使用curl、fopen、fsockopen、file_get_contents等函数进行判断,但当文件不存在或网络不稳定时,非常耗时,如果图片数量过大更会拖慢网页运行速度。
服务器无法处理的图片,可以在前端作处理:
  • 使用jq为img添加onerror事件,在加载不成功时,将图片源替换为默认图片;需要注意的是,如果再次替换不成功,可能会陷入死循环,要指定替换次数或替换后解绑onerror事件。
file_exsits: 
//仅限本地文件
if(!file_exists(“text.jpg”))
    return false;
curl:
$ch= curl_init (); 
curl_setopt($ch, CURLOPT_URL,'http://my.com/o/test.jpg'); 
curl_setopt($ch, CURLOPT_TIMEOUT, 1);//设置超时时间
curl_setopt($ch, CURLOPT_NOBODY ,1); // 不下载
curl_exec($ch); 
$httpCode =curl_getinfo($ch,CURLINFO_HTTP_CODE); 
if($httpCode==404){
   return false ;
}
fopen:
//  只有在php 的配置开启了 “allow_url_fopen= On” ,即允许远端访问,才可用,php默认开启 
if(@fopen( 'http://my.com/o/test.jpg' ,'r’)){
     return true;
file_get_contents:
//只是将内容抓取过来,如果有404页面,会将整个html都抓取,无法http判断状态码。
$s @file_get_contents($url);
if(strlen($s) == 0){
    return  false
fsockopen:
//“ allow_url_fopen= Off ”时也可以使用
$parseurl=parse_url(' http://127.0.0.1/test.jpg ');  
$host=$parseurl['host'];  
$path=$parseurl['path'];  
$fp=fsockopen($host,80, $errno, $errstr, 10);  
if(!$fp){
     return false;   
}
fputs($fp,"GET {$path} HTTP/1.1 \r\nhost:{$host}\r\n\r\n");  
if(preg_match('/HTTP\/1.1 200/',fgets($fp,1024))){
     return true; 
}else{
    return false;
}
js:
//将为加载成功的图片替换为默认图片
$('img').each(function(){
      $(this).onerror(function(key,obj){
          obj.src='default.jpg';
          obj.οnerrοr=null; 
          });
});



    • 0
      点赞
    • 3
      收藏
      觉得还不错? 一键收藏
    • 0
      评论
    文件上传漏洞是指攻击者通过上传恶意文件来执行任意代码或获取系统权限的安全漏洞。以下是几种常见的文件上传漏洞绕过方式: 1. 文件类型绕过:攻击者可以通过修改文件扩展名或使用特殊的文件名来绕过服务器对文件类型的检查。例如,将恶意的PHP文件重命名为图片文件(如.jpg),以绕过服务器对上传文件类型的限制。 2. MIME类型绕过:服务器通常会根据文件的MIME类型来判断文件类型,但攻击者可以通过修改请求头或使用特殊的MIME类型来绕过服务器的检查。例如,将恶意的PHP文件的MIME类型设置为图片类型,以欺骗服务器。 3. 双重扩展名绕过:攻击者可以通过在文件名中添加额外的扩展名来绕过服务器对文件类型的检查。例如,将恶意的PHP文件命名为"image.jpg.php",以欺骗服务器认为它是一个图片文件。 4. 绕过服务器端验证:有些服务器端验证可能存在漏洞,攻击者可以通过绕过这些验证来上传恶意文件。例如,攻击者可以通过修改请求参数或使用特殊字符来绕过服务器端的文件类型验证。 5. 绕过客户端验证:虽然客户端验证只是一种辅助手段,但攻击者仍然可以通过修改客户端代码或使用代理工具来绕过客户端的文件类型验证。 6. 目录遍历漏洞:如果服务器没有正确地对上传文件的路径进行限制,攻击者可以利用目录遍历漏洞来上传文件到其他目录,甚至是系统目录,从而执行任意代码。 7. 文件覆盖漏洞:如果服务器没有对已存在的文件进行处理,攻击者可以通过上传同名文件来覆盖原有文件,从而执行任意代码。

    “相关推荐”对你有帮助么?

    • 非常没帮助
    • 没帮助
    • 一般
    • 有帮助
    • 非常有帮助
    提交
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值