【问题标题】:Error handling & workarounds allow_url_fopen and allow_url_include is disabled on the server [duplicate]错误处理和解决方法 allow_url_fopen 和 allow_url_include 在服务器上被禁用 [重复]
【发布时间】:2012-04-18 12:07:32
【问题描述】:

我的 php 应用程序中有几个函数可以传递对 file_get_contents()、file_put_contents 和 getimagesize() 的调用。

问题是,当在 php.ini 中禁用 allow_url_fopen 和 allow_url_include 时,我会在这些关键功能上遇到错误。

警告:getimagesize() [function.getimagesize]:URL 文件访问是 在服务器配置中禁用 /home/content/.../html/_sites/mysite/wp-content/themes/mytheme/functions.php 第 2534 行

解决这些问题的方法有哪些?

编辑:这些都是与调用 php 脚本位于同一网络服务器上的本地文件。是否有读取/写入文件内容的首选方法?

【问题讨论】:

  • 如果服务器上启用了cURL,您可以将其传输到本地文件系统并在本地对文件进行操作。如果它没有启用,你就会陷入困境。
  • 编辑:这些都是与调用 php 脚本位于同一网络服务器上的所有本地文件。是否有读取/写入文件内容的首选方法?
  • 嗯,使用他们的文件系统本地路径而不是 http: URLs 怎么样?
  • @RegEdit 如果他们是are all local files on the same webserver,为什么要使用需要启用allow_url_fopen 的路径?只需使用本地文件系统路径,这些都不是问题......

标签: php file-get-contents getimagesize


【解决方案1】:

您可以使用 curl 获取远程页面。您可以将 curl 请求的结果存储到变量和 echo() 中,而不是使用 url 包装器来获取内容。

理论上,您也可以 eval() 返回的数据。但是运行远程获取的 PHP 代码是一个巨大的安全风险,以这种方式包含的任何 PHP 代码实际上可以做任何你能做的事情。 不要这样做!allow_url_include 也是如此

【讨论】:

  • 谢谢戈登。这些都是与调用 php 脚本位于同一网络服务器上的本地文件。是否有读取/写入文件内容的首选方法?
  • 如果您要包含的文件在同一台服务器上,则直接 include() 或 fopen() 即可。无需通过 URL 并增加这样做会涉及的开销。
  • 感谢 Gordon 的澄清,我错误地将文件称为 http 而不是 ABSPATH。
【解决方案2】:

如果您可以访问您的网络服务器,您可能需要找到您的 php.ini 文件,例如:

/etc/php5/apache/php.ini

并使用这些选项:

; http://php.net/allow-url-fopen
allow_url_fopen = On

; http://php.net/allow-url-include
allow_url_include = Off

如果您使用托管帐户,这些选项可能会在控制面板上以交互方式提供。

第二种解决方案可能是使用 cURL。我想您试图使用 URL 调用 getimagesize 。此处的文档:http://php.net/manual/en/book.curl.php

$ch = curl_init('http://example.com/image.php');
$fp = fopen('/my/folder/flower.gif', 'wb');
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
fclose($fp);

【讨论】:

    猜你喜欢
    • 2011-11-06
    • 1970-01-01
    • 2011-10-16
    • 1970-01-01
    • 1970-01-01
    • 2018-01-22
    • 2019-03-06
    • 2014-06-10
    相关资源
    最近更新 更多