PHP判断远程文件是否存在

 更新时间:2016年11月25日 15:47  点击:1651
我们要处理的是判断一个远程服务器文件是否是存在,而不是自己本同服务器目录了,如果判断远程服务器的文件上否存在我们需要使用到curl_init,fsockopen,fopen方法,下面我来给大家举例说明。

fopen函数

fopen() 函数打开文件或者 URL。

如果打开失败,本函数返回 FALSE。

语法

fopen(filename)filename 规定要打开的文件或 URL。

从这个函数的说明来看是支持url的,代码如下

 代码如下 复制代码

<?php
    $url = 'http://www.xxx.com/images/test.jpg';
 
    if( @fopen( $url, 'r' ) )
    {
        echo 'File Exits';
    }
    else
    {
        echo 'File Do Not Exits';
    }
 ?>

这样的写个人很不推荐哦,因为它这们很是浪费服务器性能资源的。

curl函数
例子

 代码如下 复制代码
<?php
    $url2 = 'http://www.111cn.net/ test.jpg';
 
    $ch = curl_init();
    $timeout = 10;
    curl_setopt ($ch, CURLOPT_URL, $url2);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
 
    $contents = curl_exec($ch);
    //echo $contents;
    if (preg_match("/404/", $contents)){
        echo '文件不存在';
    }
?>

小提示,不过此函数需我服务器开启才可用哦

推荐使用此方法哦,还有一种利用fsockopen 这种是专业的远程采集版了,

 代码如下 复制代码

 $url = "http://www.111cn.net /.gif";
 
    $info = parse_url($url);
    $fp = fsockopen($info['host'], 80,$errno, $errstr, 30);
    fputs($fp,"GET {$info['path']} HTTP/1.1rn");
    fputs($fp, "Host: {$info['host']}rn");
    fputs($fp, "Connection: closernrn");
    $headers = array();
    while(!feof($fp)) {
    $line = fgets($fp);
    if($line != "rn") {
    $headers[] = $line;
    }else {
    break;
    }
    }
 
    echo "<pre>";
    print_r($headers);

小提示,不过此函数需我服务器开启才可用哦

百度编辑器上传图片是保存的图片很是有问题,便全部保存在了upload目录下,这样的话图片一多就不好管理,下面我来告诉你修改UEditor图片上传路径方法。

找到ueditor/php目录下的getRemoteImage.php,

法一:将第12行的savePath" => "upload/" 修改为

 代码如下 复制代码

1 "savePath" => "upload/".date("Ymd")."/"

法二:将第80行

 代码如下 复制代码

1 $tmpName = $savePath . rand( 1 , 10000 ) . time() . strrchr( $imgUrl , '.' );

修改为

 代码如下 复制代码

1 $tmpName = $savePath . date("Ymd")."/".rand( 1 , 10000 ) . time() . strrchr( $imgUrl , '.' );

提示,上面生成的日期为20130407这样,如果想更详细我们可以

将第12行的savePath" => "upload/" 修改为

 代码如下 复制代码
1 "savePath" => "upload/".date("Y")."/.date("M")."/".date("Y");

这样更好管理

在开发中我们可以会经常碰到需要生成系统随机密码或者是登陆验证码之类的,这些数字我们肯定需要随机生成的不能定义的,下面我来总结了一些常用的在php中生成随机字符的代码,有需要的朋友可参考。

随机生成数数字

mt_rand()函数

 代码如下 复制代码

$num = mt_rand(0,9999999);

但如果我想随机生成字符串怎么操作,网站找到一个方法。

 代码如下 复制代码

function random($length) {
     srand(date("s"));
     $possible_charactors = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
     $string = "";
     while(strlen($string)<$length) {
          $string .= substr($possible_charactors,(rand()%(strlen($possible_charactors))),1);
     }
     return($string);
}

例2

 代码如下 复制代码

function random_string($length, $max=FALSE)
{
  if (is_int($max) && $max > $length)
  {
    $length = mt_rand($length, $max);
  }
  $output = '';
 
  for ($i=0; $i<$length; $i++)
  {
    $which = mt_rand(0,2);
   
    if ($which === 0)
    {
      $output .= mt_rand(0,9);
    }
    elseif ($which === 1)
    {
      $output .= chr(mt_rand(65,90));
    }
    else
    {
      $output .= chr(mt_rand(97,122));
    }
  }
  return $output;
}

例3

 代码如下 复制代码

<?php
// 说明:php 中生成随机字符串的方法
// 整理:http://www.111cn.net
function genRandomString($len)
{
    $chars = array(
        "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", 
        "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", 
        "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G", 
        "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", 
        "S", "T", "U", "V", "W", "X", "Y", "Z", "0", "1", "2", 
        "3", "4", "5", "6", "7", "8", "9"
    );
    $charsLen = count($chars) - 1;
    shuffle($chars);    // 将数组打乱
     
    $output = "";
    for ($i=0; $i<$len; $i++)
    {
        $output .= $chars[mt_rand(0, $charsLen)];
    }
    return $output;
}
$str = genRandomString(25);
$str .= "<br />";
$str .= genRandomString(25);
$str .= "<br />";
$str .= genRandomString(25);
echo $str;
?> 

 
注:传入的参数是你想要生成的随机字符串的长度。

我们现在在各大网站论坛都可以看到点击一个QQ图标就可以利用自己的QQ号在网站进行登录了,下面我来告诉你一段QQ登录集成到自己网站php代码,有需要的朋友可参考。

1.打开open.qq.com   添加创建应用:-》输入常规的数据  你会看到对应的APP ID和KEY值,这是对你身份证的唯一的验证

2.打开 http://connect.qq.com/manage/  点击->添加网站->输入相关信息  这里比较特别注意的是,回调地址那里填上你域名就可以了以上申核需要一到两天时间,耐心等待。。。

3.打开 http://wiki.opensns.qq.com/wiki/%E3%80%90QQ%E7%99%BB%E5%BD%95%E3%80%91%E7%BD%91%E7%AB%99%E6%8E%A5%E5%85%A5找到SDK库下载,我在这里下载是官方的php SDK包,如果你的虚拟空间file_get_contents不技持https,可以考虑用curl函数来替代,好多童鞋常常因为获取不到access_token也就是这个原因。任何一个包不是一气呵成了,还需你配置相关的配置,这个繁索的调试过程我就在这里展开谈了。说说原理->通过你的网站登陆QQ state和scope->获得access_token->再获得每个QQ唯一的身份ID  openid

4.在这里你调试成功后,获得ID后,还需和你当前网站帐号绑定,才能下次登陆的时候自动去识别你的相关绑定帐号内容

常见问题:

1.Warning: session_start() [function.session-start]: open(/tmpsess_s9b1ahi6vnvc0pfl2e0dcd0l10, O_RDWR) failed: 解决方法:No such file or directory (2) inD:powhostbbcarblogwebtestqqSDKcommsession.php on line 196

找到sssion.php session_save_path  加上注释//,注释掉设置路径

2.Notice: file_get_contents() [function.file-get-contents]: Unable to find the wrapper "https" - did you forget to enable it when you configured PHP? inD:powhostbbcarblogwebtestqqSDKcommutils.php on line 37

解决方法:

找到 Utils.php  function get_url_contents 函数内容直接用下面代码替代,因为file_get_content默认不支持访问https,如果要支持需配置php.ini,激活 php_openssl.dll 模块,这个大家百度配置一下便可

php代码

 代码如下 复制代码

$ch = curl_init();   
curl_setopt($ch, CURLOPT_URL,$url);   
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);   
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);   
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);   
$result = curl_exec($ch);   
return $result

下面是一个完整的实例

下面是一个QQ登录API示范接口。程序为PHP、具体代码如下:

 代码如下 复制代码

<?php /** 
* 申请http://connect.opensns.qq.com/apply 
* 列表http://connect.opensns.qq.com/my 
*/ 
session_start();  
$qq_oauth_config = array(  
    'oauth_consumer_key'=>'*******',//APP ID  
    'oauth_consumer_secret'=>'******************',//APP KEY  
    'oauth_callback'=>"http://www.sunnyi.cn/qq.php?action=reg",//这里修改为当前脚本,但是要保留?action=reg  
    'oauth_request_token_url'=>"http://openapi.qzone.qq.com/oauth/qzoneoauth_request_token",  
    'oauth_authorize_url'=>'http://openapi.qzone.qq.com/oauth/qzoneoauth_authorize',  
    'oauth_request_access_token_url'=>'http://openapi.qzone.qq.com/oauth/qzoneoauth_access_token',  
    'user_info_url' => 'http://openapi.qzone.qq.com/user/get_user_info',  
);  
$action = isset($_GET['action']) ? $_GET['action'] : '';  
 
 
$qq = new qq_oauth($qq_oauth_config);  
switch($action){  
    //用户登录 Step1:请求临时token  
    case 'login':  
        $token = $qq->oauth_request_token();  
        $_SESSION['oauth_token_secret'] = $token['oauth_token_secret'];  
        $qq->authorize($token['oauth_token']);  
    break;  
    //Step4:Qzone引导用户跳转到第三方应用  
    case 'reg':  
        $qq->register_user();  
        $access_token = $qq->request_access_token();  
        if($token = $qq->save_access_token($access_token)){  
            //保存,一般发给用户cookie,以及用户入库  
            //var_dump($token);  
            $_SESSION['oauth_token'] = $token['oauth_token'];  
            $_SESSION['oauth_token_secret'] = $token['oauth_token_secret'];  
            $_SESSION['openid'] = $token['openid'];  
            header('Content-Type: text/html; charset=utf-8');  
            $user_info = json_decode($qq->get_user_info());  
            if($user_info->ret!=0){  
                exit("获取头像昵称时发生错误".$user_info->msg);  
            } else {  
                echo 'QQ昵称:',$user_info->nickname,  
                '<img src="',$user_info->figureurl,'" />',  
                '<img src="',$user_info->figureurl_1,'" />',  
                '<img src="',$user_info->figureurl_2,'" />';  
            }  
              
        }  
    break;  
    default :  
}  
 
 
class qq_oauth{  
    private $config;  
    function __construct($config){  
        $this->config = $config;  
    }  
    /** 
     * 返回配置 
     * @param string $name 
     *  
     */ 
    function C($name){  
        return isset($this->config[$name]) ?  $this->config[$name] : FALSE;  
    }  
    /** 
     * 构建请求URL 
     * @param string $url 
     * @param array $params 
     * @param string $oauth_token_secret 
     *  
     */ 
    function build_request_uri($url,$params=array(),$oauth_token_secret=''){  
        $oauth_consumer_key = $this->C('oauth_consumer_key');  
        $oauth_consumer_secret = $this->C('oauth_consumer_secret');  
          
        $params = array_merge(array(  
            'oauth_version'=>'1.0',  
            'oauth_signature_method'=>'HMAC-SHA1',  
            'oauth_timestamp'=>time(),  
            'oauth_nonce'=>rand(1000,99999999),  
            'oauth_consumer_key'=>$oauth_consumer_key,  
        ),$params);  
        $encode_params = $params;  
        ksort($encode_params);  
        $oauth_signature = 'GET&'.urlencode($url).'&'.urlencode(http_build_query($encode_params));  
        $oauth_signature = base64_encode(hash_hmac('sha1',$oauth_signature,$oauth_consumer_secret.'&'.$oauth_token_secret,true));  
        $params['oauth_signature'] = $oauth_signature;  
        return $url.'?'.http_build_query($params);  
    }  
    /** 
     * 校验回调是否返回约定的参数  
     */ 
    function check_callback(){  
        if(isset($_GET['oauth_token']))  
            if(isset($_GET['openid']))  
                if(isset($_GET['oauth_signature']))  
                    if(isset($_GET['timestamp']))  
                        if(isset($_GET['oauth_vericode']))  
                            return true;  
        return false;  
    }  
     
    function get_contents($url){  
        $curl = curl_init();  
        curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);  
        curl_setopt($curl,CURLOPT_URL,$url);  
        return curl_exec($curl);  
    }  
    /** 
     * Step1:请求临时token、Step2:生成未授权的临时token 
     */ 
    function oauth_request_token(){  
        $url = $this->build_request_uri($this->C('oauth_request_token_url'));  
        $tmp_oauth_token = $this->get_contents($url);  
        parse_str($tmp_oauth_token);  
        /* 
        oauth_token 未授权的临时token 
        oauth_token_secret  token的密钥,该密钥仅限于临时token 
        error_code  错误码 
        */ 
        if(isset($error_code)) exit($error_code);  
        return array(  
            'oauth_token'=>$oauth_token,  
            'oauth_token_secret'=>$oauth_token_secret 
        );  
    }  
    /** 
     * Step3:引导用户到Qzone的登录页 
     * @param string $oauth_token 未授权的临时token 
     */ 
    function authorize($oauth_token){  
        $str = "HTTP/1.1 302 Found";  
        header($str);  
        $url = $this->C('oauth_authorize_url');  
        $query_strings = http_build_query(array(  
            'oauth_consumer_key'=>$this->C('oauth_consumer_key'),  
            'oauth_token'=>$oauth_token,  
            'oauth_callback'=>$this->C('oauth_callback'),  
        ));  
        header('Location: '.$url.'?'.$query_strings);  
    }  
    /** 
     * Step4:Qzone引导用户跳转到第三方应用 
     * @return bool 验证是否有效  
     */ 
    function register_user(){  
        /* 
         * oauth_token  已授权的临时token 
         * openid   腾讯用户对外的统一ID,该OpenID与用户QQ号码一一对应 
         * oauth_signature  签名值,方便第三方来验证openid以及来源的可靠性。 
         *      使用HMAC-SHA1算法: 
         *      源串:openid+timestamp(串中间不要添加'+'符号) 
         *      密钥:oauth_consumer_secret 
         * timestamp    openid的时间戳 
         * oauth_vericode   授权验证码。 
         */ 
        if($this->check_callback()){  
            //校验签名  
            $signature = base64_encode(hash_hmac('sha1',$_GET['openid'].$_GET['timestamp'],$this->C('oauth_consumer_secret'),true));  
            if(!empty($_GET['oauth_signature']) && $signature==$_GET['oauth_signature']){  
                $_SESSION['oauth_token'] = $_GET['oauth_token'];  
                $_SESSION['oauth_vericode'] = $_GET['oauth_vericode'];  
                return;  
            }  
        }  
        //校验未通过  
        exit('UNKNOW REQUEST');  
    }  
    /** 
     * Step5:请求access token  
     */ 
    function request_access_token(){  
        $url = $this->build_request_uri($this->C('oauth_request_access_token_url'),array(  
            'oauth_token'=>$_SESSION['oauth_token'],  
            'oauth_vericode'=>$_SESSION['oauth_vericode']  
        ),$_SESSION['oauth_token_secret']);  
        return $this->get_contents($url);  
    }  
    /** 
     * Step6:生成access token (保存access token) 
     *  
     * 关于access_token 
     * 目前access_token(及其secret)是长期有效的,和某一个openid对应,目前可以支持线下获取该openid的信息。  
     * 当然,用户有权限在Qzone这边删除对第三方的授权,此时该access_token会失效,需要重新走整个流程让用户授权。 
     * 以后会逐步丰富access_token的有效性,长期有效、短期有效、用户登录时才有效等。 
     */ 
    function save_access_token($access_token_str){  
        parse_str($access_token_str,$access_token_arr);  
        if(isset($access_token_arr['error_code'])){  
            return FALSE;  
        } else {  
            return $access_token_arr;  
        }  
    }  
    /** 
     * 目前腾讯仅开放该API 
     * 获取登录用户信息,目前可获取用户昵称及头像信息。 
     * http://openapi.qzone.qq.com/user/get_user_info 
     */ 
    function get_user_info(){  
        $url = $this->build_request_uri($this->C('user_info_url'),array(  
            'oauth_token'=>$_SESSION['oauth_token'],  
            'openid'=>$_SESSION['openid'],  
        ),$_SESSION['oauth_token_secret']);  
        return $this->get_contents($url);  
    }  
}  

有时我们在利用表单提交时特别是文本框时用户提交的空格,回车我们都会原样保存到数据库中去,但有时我们要过滤它怎么办呢,下面我写了一个函数有需要的朋友可参考消息。

实现原理就是利用str_replace来替换rn n t就可以了,再后面利用正则表达式来过滤一些注释标记.

 

 代码如下 复制代码
function compress_html($string) {
$string = str_replace("rn", '', $string); 
$string = str_replace("n", '', $string); 
$string = str_replace("t", '', $string); 
$string = str_replace(chr(13), '', $string);
$string = str_replace(chr(32), '', $string);
return preg_replace($pattern, $replace, $string);
}

当然如果中间还有其它要替换的确们可以在数据中增加正则表达式规则即可了。

[!--infotagslink--]

相关文章

  • php读取zip文件(删除文件,提取文件,增加文件)实例

    下面小编来给大家演示几个php操作zip文件的实例,我们可以读取zip包中指定文件与删除zip包中指定文件,下面来给大这介绍一下。 从zip压缩文件中提取文件 代...2016-11-25
  • Jupyter Notebook读取csv文件出现的问题及解决

    这篇文章主要介绍了JupyterNotebook读取csv文件出现的问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2023-01-06
  • JavaScript判断浏览器及其版本信息

    本篇文章主要分享了通过window.navigator来判断浏览器及其版本信息的实例代码。具有一定的参考价值,下面跟着小编一起来看下吧...2017-01-23
  • Photoshop打开PSD文件空白怎么解决

    有时我们接受或下载到的PSD文件打开是空白的,那么我们要如何来解决这个 问题了,下面一聚教程小伙伴就为各位介绍Photoshop打开PSD文件空白解决办法。 1、如我们打开...2016-09-14
  • 解决python 使用openpyxl读写大文件的坑

    这篇文章主要介绍了解决python 使用openpyxl读写大文件的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-13
  • C#实现HTTP下载文件的方法

    这篇文章主要介绍了C#实现HTTP下载文件的方法,包括了HTTP通信的创建、本地文件的写入等,非常具有实用价值,需要的朋友可以参考下...2020-06-25
  • SpringBoot实现excel文件生成和下载

    这篇文章主要为大家详细介绍了SpringBoot实现excel文件生成和下载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-09
  • C#操作本地文件及保存文件到数据库的基本方法总结

    C#使用System.IO中的文件操作方法在Windows系统中处理本地文件相当顺手,这里我们还总结了在Oracle中保存文件的方法,嗯,接下来就来看看整理的C#操作本地文件及保存文件到数据库的基本方法总结...2020-06-25
  • php无刷新利用iframe实现页面无刷新上传文件(1/2)

    利用form表单的target属性和iframe 一、上传文件的一个php教程方法。 该方法接受一个$file参数,该参数为从客户端获取的$_files变量,返回重新命名后的文件名,如果上传失...2016-11-25
  • php批量替换内容或指定目录下所有文件内容

    要替换字符串中的内容我们只要利用php相关函数,如strstr,str_replace,正则表达式了,那么我们要替换目录所有文件的内容就需要先遍历目录再打开文件再利用上面讲的函数替...2016-11-25
  • 一个奇葩的最短的 IE 版本判断JS脚本

    使用 conditional comment 来判断 IE 的版本。嗯,是早早有人提出,但没有认真看代码。昨天刚好在看 CSS3 PIE 的时候看到,觉得是不是不靠谱。今天看到 Paul Irish 也提起,那么,推荐一下吧。这是作者博客上写的:复制代码 代码...2014-05-31
  • PHP文件上传一些小收获

    又码了一个周末的代码,这次在做一些关于文件上传的东西。(PHP UPLOAD)小有收获项目是一个BT种子列表,用户有权限上传自己的种子,然后配合BT TRACK服务器把种子的信息写出来...2016-11-25
  • c# 判断是否为空然后赋值的4种实现方法

    下面小编就为大家分享一篇c# 判断是否为空然后赋值的4种实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-06-25
  • AI源文件转photoshop图像变模糊问题解决教程

    今天小编在这里就来给photoshop的这一款软件的使用者们来说下AI源文件转photoshop图像变模糊问题的解决教程,各位想知道具体解决方法的使用者们,那么下面就快来跟着小编...2016-09-14
  • C++万能库头文件在vs中的安装步骤(图文)

    这篇文章主要介绍了C++万能库头文件在vs中的安装步骤(图文),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-23
  • Zend studio文件注释模板设置方法

    步骤:Window -> PHP -> Editor -> Templates,这里可以设置(增、删、改、导入等)管理你的模板。新建文件注释、函数注释、代码块等模板的实例新建模板,分别输入Name、Description、Patterna)文件注释Name: 3cfileDescriptio...2013-10-04
  • php文件上传你必须知道的几点

    本篇文章主要说明的是与php文件上传的相关配置的知识点。PHP文件上传功能配置主要涉及php.ini配置文件中的upload_tmp_dir、upload_max_filesize、post_max_size等选项,下面一一说明。打开php.ini配置文件找到File Upl...2015-10-21
  • ant design中upload组件上传大文件,显示进度条进度的实例

    这篇文章主要介绍了ant design中upload组件上传大文件,显示进度条进度的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-10-29
  • C#使用StreamWriter写入文件的方法

    这篇文章主要介绍了C#使用StreamWriter写入文件的方法,涉及C#中StreamWriter类操作文件的相关技巧,需要的朋友可以参考下...2020-06-25
  • php实现文件下载实例分享

    举一个案例:复制代码 代码如下:<?phpclass Downfile { function downserver($file_name){$file_path = "./img/".$file_name;//转码,文件名转为gb2312解决中文乱码$file_name = iconv("utf-8","gb2312",$file_name...2014-06-07