【问题标题】:php file_get_contents on local file via http通过 http 在本地文件上的 php file_get_contents
【发布时间】:2026-01-30 15:25:01
【问题描述】:
<?php

error_reporting(E_ALL);

if(file_get_contents("http://localhost/antispam/img.php") == false)
    print 'Error';
else
    print 'Read successfully';

?>

这总是打印errorimg.php 返回一个 php 生成的图像,但上面的代码无法读取。我的 php.ini 看起来很典型,没有显示错误,我错过了什么?

注意allow_url_fopen已经被设置为On1

img.php

$code = 'default';
header("Content-Type: image/jpeg");
$im = @imagecreate(200, 50) or die ("Cannot Initialize new GD image stream");
$bgColour = imagecolorallocate($im, 0, 0, 0);
$textColour = imagecolorallocate($im, 233, 14, 91);

$wSpace = 30; $hSpace = 20;
$prevW = 0;

for($i = 0; $i < strlen($code); $i++)
{
    $w = $prevW + rand(20, $wSpace);
    imagestring($im, 5, $w, rand(0,$hSpace),  substr($code, $i, 1), $textColour);
    $prevW = $w;
}

imagejpeg($im);
imagedestroy($im);

【问题讨论】:

  • 正如@raina77ow 所说,除非设置了allow_url_fopen,否则您无法通过http 访问。另一种选择是通过本地文件路径访问该文件,类似于/var/www/antispam/img.php 的内容,或者您​​服务器上的任何路径。
  • 我已经检查了我的 php.ini,一切似乎都很好。该文件是本地文件,因为它与所述文件位于同一目录中,但我理解你的意思。
  • 我的allow_url_fopen默认设置为On
  • 如果你把它改成file_get_contents("http://localhost/antispam/img.php") === false)...会发生什么
  • 等等,如果=== false返回false,那么这个函数正在工作,它只是从页面中读取任何内容。你确定img.php 正确创建了图像吗?

标签: php file-get-contents


【解决方案1】:

检查您的 php.ini:需要激活 allow_url_fopen,以便打开 URL。 如果文件在本地主机上,则不需要 URL Wrapper。只需提供文件系统路径即可。

该文件需要由正在运行 php 的用户读取(使用 mod_php 时通常是 apache 用户,或者 (f)cgi、fpm...情况下的php进程

【讨论】:

  • 我正在使用 apache 运行 xampplite,并且 allow_url_fopen 已正确设置。
  • 尝试使用路径,而不是 URL。该文件位于您的文档根目录 /antispam/ 中,因此您不需要 URL 访问。检查文件权限,在 img.php 上执行 chmod 755 进行测试。
  • 为什么 OP 需要使用 file_get_contents 而不仅仅是 require-ing 本地文件,你怎么看?
  • 需要图片?我不知道操作试图实现什么,但我想这不仅仅是检查文件是否存在。如果是这样,require 也会有点奇怪。
  • 非常感谢它成功了!!!。不仅是 file_get_contents,还有 wordpress 中的 wp_remote_get