当前位置:首页 > PHP教程 > php应用 > 列表

file_get_contents url 含有特殊字符获取失败问题处理

发布:smiling 来源: PHP粉丝网  添加日期:2018-09-19 10:01:08 浏览: 评论:0 

file_get_contents 在文件名包含特殊符号的时候回遇到处理失败的情况,解决办法是使用urlencode函数处理下文件名。

  1. <?php 
  2. $name='包含特殊符的文件名'
  3. $name=urlencode($name); 
  4. $url = "http://phpfensi.com/{$name}.jpg"
  5. $con = file_get_contents($url); 
  6. ?> 

知识扩充

file_get_contents()模拟referer,cookie, 使用proxy等等

参考代码

  1. ini_set('default_socket_timeout',120); 
  2. ini_set('user_agent','MSIE 6.0;'); 
  3. $context=array('http' => array ('header'=> 'Referer: http://www.baidu.com/', ),); 
  4. $xcontext = stream_context_create($context); 
  5. echo $str=file_get_contents('http://www.phpfensi.com/',FALSE,$xcontext); 

下面是file_get_contents和curl两个函数同样功能的不同写法

file_get_contents函数的使用示例:

  1. <?php 
  2. $file_contents = file_get_contents(‘http://www.phpfensi.com/’); 
  3. echo $file_contents
  4. ?> 

换成curl函数的使用示例:

  1. <?php 
  2.  
  3. $ch = curl_init(); 
  4.  
  5. $timeout = 5; 
  6.  
  7. curl_setopt ($ch, CURLOPT_URL, ‘http://www.phpfensi.com’); 
  8.  
  9. curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
  10.  
  11. curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 
  12.  
  13. $file_contents = curl_exec($ch); 
  14.  
  15. curl_close($ch); 
  16.  
  17. echo $file_contents
  18.  
  19. ?> 

利用function_exists函数来判断php是否支持一个函数可以轻松写出下面函数:

  1. <?php 
  2.  
  3. function vita_get_url_content($url) { 
  4.  
  5. if(function_exists(‘file_get_contents’)) { 
  6.  
  7. $file_contents = file_get_contents($url); 
  8.  
  9. else { 
  10.  
  11. $ch = curl_init(); 
  12.  
  13. $timeout = 5; 
  14.  
  15. curl_setopt ($ch, CURLOPT_URL, $url); 
  16.  
  17. curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
  18.  
  19. curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 
  20.  
  21. $file_contents = curl_exec($ch); 
  22.  
  23. curl_close($ch); 
  24.  
  25.  
  26. return $file_contents
  27.  
  28.  
  29. ?> 

其实上面的这个函数还有待商榷,如果你的主机服务商把file_get_contents和curl都关闭了,上面的函数就会出现错误。那最后的办法就得换空间或者在支持的空间上写接口,在不支持的空间上进行调用了。

Tags: 字符 问题

分享到: