php的php fopenn函数 会导致源站IP暴露吗?

让我们算一算有多少种方法

处理諸如 PHP 之类的现代编程语言的乐趣之一就是有大量的选项可用PHP 可以轻松地赢得 Perl 的座右铭“There's more than one way to do it”(并非只有一种方法可做这件事),尤其是在攵件处理上但是在这么多可用的选项中,哪一种是完成作业的最佳工具当然,实际答案取决于解析文件的目标因此值得花时间探究所有选项。

php fopenn 方法可能是以前的 C 和 C++ 程序员最熟悉的因为如果您使用过这些语言,那么它们或多或少都是您已掌握多年的工具对于这些方法中的任何一种,通过使用 php fopenn(用于读取数据的函数)的标准方法打开文件然后使用 fclose 关闭文件,如清单 1 所示

清单 中),故在此不再赘述可以这样说,字符串格式化极为灵活值得注意的是所有字段都放在函数的返回值中。(在 C 中它们都被作为参数传递。)

fgetss 函数不同于傳统文件函数并使您能更好地了解 PHP 的力量该函数的功能类似于 fgets 函数,但将去掉发现的任何 HTML 或 PHP 标记只留下纯文本。查看如下所示的 HTML 文件

然后通过 fgetss 函数过滤它。

无论怎样读取文件您都可以使用 fpassthru 将其余数据转储到标准输出通道。

此外此函数将打印数据,因此无需使用变量获取数据

非线性文件处理:跳跃访问

当然,以上函数只允许顺序读取文件更复杂的文件可能要求您来回跳转到文件的不同部分。这時就用得着 fseek

以上示例将跳转回文件的开头。如果不需要完全返回 —— 我们可设定返回千字节 —— 然后就可以这样写:

从 PHP V4.0 开始您有一些其他选项。例如如果需要从当前位置向前跳转 100 个字节,则可以尝试使用:

类似地可以使用以下代码向后跳转 100 个字节:

如果需要向后跳转至文件末尾前 100 个字节处,则应使用 SEEK_END

在到达新位置后,可以使用 fgetsfscanf 或任何其他方法读取数据

注:不能将 fseek 用于引用 URL 的文件处理。

现在我们将接触到一些 PHP 的更独特的文件处理功能:用一两行处理大块数据。例如如何提取文件并在 Web 页面上显示其全部内容?好的您看到叻 fgets 使用循环的示例。但是如何能够使此过程变得更简单用 fgetcontents 会使过程超级简单,该方法将把整个文件放入一个字符串中

虽然它不是最好嘚做法,但是可以将此命令更简明地写为:

本文主要介绍的是如何处理本地文件但是值得注意的是您还可以用这些函数提取、回显和解析其他 Web 页面。

您一定会查看此命令并认为:“那还是太费力”PHP 开发人员同意您的看法。因此可以将以上命令缩短为:

readfile 函数将把文件或 Web 页媔的全部内容转储到默认的输出缓冲区默认情况下,如果失败此命令将打印错误消息。要避免此行为(如果需要)请尝试:

当然,洳果确实需要解析文件则 file_get_contents 返回的单个字符串可能有些让人吃不消。您的第一反应可能是用 split() 函数将它分解一下

但是既然已经有一个很好嘚函数为您执行此操作为什么还要这样大费周章?PHP 的 file() 函数一步即可完成此操作:它将返回分为若干行的字符串数组

应当注意的是,以上兩个示例有一点细微差别虽然 split 命令将删除新行,但是当使用 file 命令(与 fgets 命令一样)时新行仍将被附加到数组中的字符串上。

以下命令将紦此文件转储为数组然后打印该数组:

当然,您可能注意到此命令合并了各个部分这是默认行为,但是您可以通过将第二个参数传递給 parse_ini_file 轻松地修正它:process_sections这是一个布尔型变量。将 process_sections 设为 True

并且您将获得以下输出:

PHP 将把数据放入可以轻松解析的多维数组中。

对于 PHP 文件处理来說这只是冰山一角。诸如 tidy_parse_filexml_parse 之类的更复杂的函数可以分别帮助您处理 HTML 和 XML 文档有关这些特殊函数的使用细节,请参阅 如果您要处理那些类型的文件,则那些参考资料值得一看但不必过度考虑本文中谈到的每种可能遇到的文件类型,下面是一些用于处理到目前为止介绍嘚函数的很好的通用规则

绝不要假定程序中的一切都将按计划运行。例如如果您要查找的文件已被移动该当如何?如果权限已被改变洏无法读取其内容又当如何您可以通过使用 file_existsis_readable 预先检查这些问题。

但是在实践中,用这样的代码可能太繁琐了处理 php fopenn 的返回值更简单並且更准确。

由于失败时 php fopenn 将返回 False这将确保仅当文件成功打开后才执行文件处理。当然如果文件不存在或者不可读,您可以期望一个负返回值这将使这个检查可以检查所有可能遇到的问题。此外如果打开失败,可以退出程序或让程序显示错误消息

时,即使文件处理未正常关闭也不会执行什么操作,因此通常不必检查 fclose 的返回值

PHP 不缺读取和解析文件的有效方法。诸如 fread 之类的典型函数可能在大多数时候都是最佳的选择或者当 readfile 刚好能满足任务需要时,您可能会发现自己更为 readfile 的简单所吸引它实际上取决于所要完成的操作。

如果要处理夶量数据fscanf 将能证明自己的价值并比使用 file 附带 splitsprintf 命令更有效率。相反如果要回显只做了少许修改的大量文本,则使用 filefile_get_contentsreadfile 可能更合适使用 PHP 进行缓存或者创建权宜的代理服务器时可能就属于这种情况。

PHP 给您提供了大量处理文件的工具深入了解这些工具并了解哪些工具最適合于要处理的项目。您已拥有很多的选择因此好好地利用它们享受使用 PHP 处理文件的乐趣。

  • 是所有 PHP 的完全命令参考
  • 阅读“”发现 PHP 用于構建复杂且功能强大的 Web 相关程序的简单方法。
  • 了解本文未涉及到的 函数的信息
  • 了解本文未涉及到的 函数的信息。
  • 是 PHP 开发人员的资源
  • 收聽针对软件开发人员的有趣访谈和讨论,一定要访问 developerWorks 的
  • 访问 developerWorks ,获得丰富的 how-to 信息、工具和项目更新帮助您用开放源码技术进行开发,并與 IBM 产品结合使用
  • 使用 构建您的下一个开发项目,这些软件可以通过下载或从 DVD 中获得
  • 访问 浏览开放源码技术的各种参考资料。
}

本文实例讲述了php中file_get_contents与curl性能比较分析分享给大家供大家参考。具体如下:

在php中如果不仔细的去分析性能会发现file_get_contents与curl两个同很多共同点的他们都可以采集文件打开文件,但昰如果仔细一对比会发现很多不同点下面我们一起来看看file_get_contents与curl区别。


file_get_contents处理频繁小的时候用它感觉挺好的。没什么异常如果你的文件被1k+囚处理。那么你的服务器cpu就等着高升吧所以建议自己和大家在以后写php代码的时候使用curl库。

希望本文所述对大家的PHP程序设计有所帮助

}

本人一直使用的是asp和.net环境php比较尐使用。如果用asp或asp.net来进行文件操作我还是比较有经验的。今天由于需要我得在php环境下做一次文件的读写操作,这对于我来说还是第一佽

虽然在写程序时信心十足,但是当运行起来时却发现没那么简单

路径问题导致php fopenn() 创建和写入文件失败

首先是在本地测试程序,程序如丅:

不过上述的相对路径的写法,不是我的习惯我比较喜欢用绝对路径。查了下我发现可以用如下方式来写文件的路径:

这个方法昰首先定义了根目录,再写出文件的绝对路径更通用,也方便管理

本地测试通过,原以为上传到空间后会很顺利谁知竟然不成功!昰什么新的问题又出现了?

根据提示是没有权限。

原来空间里的目录写权限没有打开。这个已经不是php的问题了

filename可以是一个本地文件,也可以是一个URL

如果filename 指定的是一个本地文件,该文件必须是 PHP 可以访问的并且文件访问权限允许该访问。

只读方式打开将文件指针指姠文件头。
读写方式打开将文件指针指向文件头。
写入方式打开将文件指针指向文件末尾。如果文件不存在则尝试创建之
读写方式咑开,将文件指针指向文件末尾如果文件不存在则尝试创建之。
写入方式打开将文件指针指向文件头并将文件大小截为零。如果文件鈈存在则尝试创建之
读写方式打开,将文件指针指向文件头并将文件大小截为零如果文件不存在则尝试创建之。

成功时返回文件指针資源()如果打开失败,本函数返回 FALSE

如果打开失败,会产生一个 E_WARNING 错误可以。

有时我们会看到中mode值包含一个“b”字符,例如“wb”這是怎么回事呢?

不同的操作系统家族具有不同的行结束习惯当写入一个文本文件并想插入一个新行时,需要使用符合操作系统的行结束符号基于 Unix 的系统使用 \n 作为行结束字符,基于 Windows 的系统使用 \r\n 作为行结束字符基于 Macintosh 的系统使用 \r 作为行结束字符。

如果写入文件时使用了错誤的行结束符号则其它应用程序打开这些文件时可能会表现得很怪异。

Windows 下提供了一个文本转换标记('t')可以透明地将 \n 转换为 \r\n与此对应還可以使用 'b' 来强制使用二进制模式,这样就不会转换数据要使用这些标记,要么用 'b' 或者用 't' 作为 mode 参数的最后一个字符

默认的转换模式依賴于 SAPI 和所使用的 PHP 版本,因此为了便于移植鼓励总是指定恰当的标记如果是操作纯文本文件并在脚本中使用了 \n 作为行结束符,但还要期望這些文件可以被其它应用程序例如 Notepad 读取则在 mode 中使用 't'。在所有其它情况下使用 'b'

在操作二进制文件时如果没有指定 'b' 标记,可能会碰到一些渏怪的问题包括坏掉的图片文件以及关于 \r\n 字符的奇怪问题。

为移植性考虑强烈建议在用 php fopenn() 打开文件时总是使用 'b' 标记。

}

我要回帖

更多关于 php fopen 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信