PHP fopen 读取带中文URL地址的一点见解

但昨天在读取一张图片的时候出问题了,后来发现是URL里带中文字符。

例如下面这种情况:


代码如下:

$files = fopen('http://www.website.com/我的PP.jpg', 'rb');

那“$files”的返回值将会是“False”。首先我想到的是将URL用urlencode编码一下,发现还是不行,原来urlencode会把“:”、“/”字符也编码了,那URL就不是URL了。呵,说得有些绕口,那就把“:”、“/”字符的编码替换回来就应该行的。


代码如下:

$url = 'http://www.website.com/我的PP.jpg';
$url = preg_replace('/\%3A/i', ':', preg_replace('/\%2F/i', '/', urlencode(urldecode($url)))); $file = fopen($url, 'rb');

试试,嘿~还真是行了。下面再温习一下fopen()函数:

fopen() 函数打开文件或者URL。 如果打开失败,本函数返回FALSE。 打开成功,本函数返回TRUE。

一、语法:



代码如下:

fopen(filename, mode, include_path, context)

















参数 描述
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 以及以后的版本所支持,仅能用于本地文件。

(0)

相关推荐

  • 解析php中的fopen()函数用打开文件模式说明

    fopen() 函数用于在 PHP 中打开文件.此函数的第一个参数含有要打开的文件的名称,第二个参数规定了使用哪种模式来打开文件: 复制代码 代码如下: <?php$file=fopen("welcome.txt","r");?> 文件可能通过下列模式来打开:r : 只读.指针定位在文件的开头,如果文件不会报错.r+: 读/写.指针定位在文件的开头,如果文件不存会报错.w : 只写.打开并清空文件的内容,如果文件不存在,则创建新文件.w+: 读/写.打开

  • PHP读取网页文件内容的实现代码(fopen,curl等)

    1.fopen实现代码: 复制代码 代码如下: <?php $handle = fopen ("http://www.example.com/", "rb"); $contents = ""; while (!feof($handle)) { $contents .= fread($handle, 8192); } fclose($handle); ?> 复制代码 代码如下: <?php // 对 PHP 5 及更高版本 $ha

  • PHP 获取远程网页内容的代码(fopen,curl已测)

    1.fopen的使用 复制代码 代码如下: <?php $handle = fopen ("http://s.jb51.net/", "rb"); $contents = ""; while (!feof($handle)) { $contents .= fread($handle, 8192); } fclose($handle); echo $contents; //输出获取到得内容. ?> 复制代码 代码如下: // 对 PHP

  • php使用fopen创建utf8编码文件的方法

    本文实例讲述了php使用fopen创建utf8编码文件的方法.分享给大家供大家参考.具体实现方法如下: 一般来说,如果我们直接使用fopen创建会发现文件编码都不是uft-8的了,那么如果要创建uft8文件我们需要进行一些技术处理.具体步骤如下: 使用PHP创建编码格式为utf-8文件的方法: 第一步:新建一个txt文件,打开,文件->另存为xxx.php,并将编码改为UTF-8,保存. 第二部:在php文件中加入如下代码: 复制代码 代码如下: <?php $filename=rand(10

  • php打开文件fopen函数的使用说明

    1.resource  fopen(string  $filename, string $mode [,bool $use_include_path [, resource $zcontext]])函数功能:fopen() 将 filename 指定的名字资源绑定到一个流上.如果filename 是 "scheme://..." 的格式,则被当成一个 URL,PHP 将搜索协议处理器(也被称为封装协议)来处理此模式.如果该协议尚未注册封装协议,PHP 将发出一条消息来帮助检查脚本中潜在

  • PHP中通过fopen()函数访问远程文件示例

    使用PHP不仅可以让用户通过浏览器访问服务器端的文件,还可以通过HTTP或FTP等协议访问其他服务器中的文件,可以在大多数需要用文件名作为参数的函数中使用HTTP和FTP URL来代替文件名.使用fopen()函数将指定的文件名与资源绑定到一个流上,如果文件名是"scheme://-"的格式,则被当成一个URL,PHP将搜索协议处理器(也被成为封装协议)来处理此模式. 如果需要远程访问文件,必须在PHP的配置文件中激活"allow_url_fopen"选项,才能使用

  • php file_put_contents()功能函数(集成了fopen、fwrite、fclose)

    命令:file_put_contents(): 命令解析:file_put_contents (PHP 5) file_put_contents -- 将一个字符串写入文件 说明: int file_put_contents ( string filename, string data [, int flags [, resource context]] ) 和依次调用 fopen(),fwrite() 以及 fclose() 功能一样. 参数 data 可以是数组(但不能为多维数组),这就相当

  • PHP使用fopen与file_get_contents读取文件实例分享

    php中读取文件可以使用fopen和file_get_contents这两个函数,二者之间没有本质区别,只是前者读取文件的php代码相比后者要复杂一点.本文章通过实例向大家讲解fopen和file_get_contents读取文件的实现代码.需要的码农可以参考一下. fopen读取文件的代码如下: <?php $file_name = "1.txt"; echo $file_name . " "; $fp = fopen($file_name, 'r'); /

  • php 使用fopen函数创建、打开文件详解及实例代码

    php中没有单独的文件创建函数,如果我们想创建函数,可以使用fopen(),fopen()函数字面意思是打开文件,但该函数也有创建文件的功能,当使用 fopen() 函数打开一个文件时,如果文件不存在,则会尝试创建该文件,并返回一个资源. php fopen函数介绍 fopen函数打开文件或者 URL 语法: resource fopen( string filename, string mode ) fopen()将 filename 指定的名字资源绑定到一个流上. 参数: 1. filena

  • php读取本地文件常用函数(fopen与file_get_contents)

    下面我们以.txt文件为实例来介绍php读取本地文件的函数,读取文件我们可以利用fopen或file_get_contents来读取,file_get_contents更简单而fopen需要fread配合才可以显示读出的内容. 1.首先来介绍一下fopen()函数 下面我们给出了一个直接打开本地文件的代码demo,必要的地方我们都已经加上了注释: 复制代码 代码如下: //直接打开一个本地文件的实例代码       <?php       //假若我们本地的文件是一个名为xmlas.txt的文本

  • PHP fopen()和 file_get_contents()应用与差异介绍

    复制代码 代码如下: $file=fopen("11.txt","r")or exit("Unable to open file!");//fopen打开文件,如果不存在就显示打不开. $filesize =filesize("11.txt");//计算文件大小 echo fread($file,$filesize);//读取文件 fclose($file);//关闭文件 fopen()打开文件例子, fclose()用不用在

  • php中file_get_content 和curl以及fopen 效率分析

    三个函数虽然都是读取资源的函数,但各自的应用场景不同. curl多用于互联网网页之间的抓取,fopen多用于读取文件,而file_get_contents多用于获取静态页面的内容. 1. fopen /file_get_contents 每次请求都会重新做DNS查询,并不对DNS信息进行缓存.但是CURL会自动对DNS信息进行缓存.对同一域名下的网页或者图片的请求只需要一次DNS查询.这大大减少了DNS查询的次数.所以CURL的性能比fopen /file_get_contents 好很多. 2

随机推荐