【问题标题】:PHP file_get_contents() and cURL both failPHP file_get_contents() 和 cURL 都失败了
【发布时间】:2014-05-29 05:30:02
【问题描述】:

我知道对于这个论坛上的许多好人来说,这可能是老生常谈,但是在这里寻找解决方案几个小时后,我仍然遇到了麻烦。

我已经确认我可以简单地调用 file_get_contents() 来工作:

$content = file_get_contents('example.com');
print $content;

(按预期输出网站的内容。)

而且,如果我将脚本生成的 URL 之一直接插入浏览器,也可以:

http://patft.uspto.gov/netacgi/nph-Parser?Sect1=PTO2&Sect2=HITOFF&u=/netahtml/PTO/search-adv.htm&r=0&p=1&f=S&l=50&Query=AN/"联合信号" AND (((((((CCL/29/$ OR CCL/62/$) OR CCL/165/$) OR CCL/180/$) OR CCL/236/ $) OR CCL/237/$) OR CCL/241/$) OR CCL/248/$) OR CCL/417/$)&d=PTXT

(实际上,它是在我的代码中生成/存储为名为 $url 的文字字符串。不过,当我键入此内容时,我注意到引号在这里抛出了一些东西。不确定这是否会转化为我的问题与否。)

但是,当我尝试将两者结合起来时,它会立即失败:

    $content = file_get_contents($url);
    print $content;

(什么都不输出。)

到目前为止,我已经尝试了所有涉及 cURL 的各种用途的建议,当然还有 json 来尝试了解正在发生的事情。但是,除了我让 HTTP 400 吐出的一种情况,以及另一种输出为 NULL 的情况(抱歉,我丢失了我一直在阅读的特定帖子的链接)之外,没有运气。

我敢肯定,我在这里错过了一些非常简单的东西,当我找到它时,我可能会 ::head desk::,但现在我被卡住了。有什么建议吗?

提前致谢

编辑:我忘了包括,错误日志中也没有任何内容。 编辑:allow_url_fopen 设置正确。 编辑:使用 urlencode($url) 确实会产生以下错误,当上面的例子被调用时...... [29-May-2014 02:08:57 America/New_York] PHP 警告:file_get_contents(http%3A%2F%2Fpatft.uspto.gov%2Fnetacgi%2Fnph-Parser%3FSect1%3DPTO2%26Sect2%3DHITOFF%26u%3D% 2Fnetahtml%2FPTO%2Fsearch-adv.htm%26r%3D0%26p%3D1%26f%3DS%26l%3D50%26Query%3DAN%2F%22alied+signal%22%0D%0A+AND+%28%28%28% 28%28%28%28%28CCL%2F29%2F%24+OR+CCL%2F62%2F%24%29+OR+CCL%2F165%2F%24%29+OR+CCL%2F180%2F%24% 29+OR+CCL%2F236%2F%24%29+OR+CCL%2F237%2F%24%29+OR+CCL%2F241%2F%24%29+OR+CCL%2F248%2F%24%29+ OR+CCL%2F417%2F%24%29%26d%3DPTXT):无法打开流:第 21 行的 C:\inetpub\wwwroot\PHP-CGI\test.php 中的参数无效

编辑:一些测试代码...

<?php
    print "Testing...<BR>";
    define("PATFT_head",'http://patft.uspto.gov/netacgi/nph-Parser?Sect1=PTO2&Sect2=HITOFF&u=%2Fnetahtml%2FPTO%2Fsearch-adv.htm&r=0&p=1&f=S&l=50&Query=AN%2F%22');
    define("PATFT_foot",'%22+AND+%28%28%28%28%28%28%28%28CCL%2F29%2F%24+OR+CCL%2F62%2F%24%29+OR+CCL%2F165%2F%24%29+OR+CCL%2F180%2F%24%29+OR+CCL%2F236%2F%24%29+OR+CCL%2F237%2F%24%29+OR+CCL%2F241%2F%24%29+OR+CCL%2F248%2F%24%29+OR+CCL%2F417%2F%24%29&d=PTXT');
    $assignees = file("./config/assignees.txt");
    foreach ($assignees as $name) {
    $url= PATFT_head.$name.PATFT_foot;
    $content = file_get_contents($url);
    #print "Should see the page here...<BR>";
    print $content;
    }
    print "<BR>Done.";
?>

assignees.txt 的内容是一系列搜索词(在本例中为专利持有人的受让人姓名),每行 1 个。

【问题讨论】:

  • 和 ::head desk:: 这就是我处理 URL 中引号的方式。请注意对上面测试代码的最终更正。我猜在这种情况下 IE/Firefox/Chrome 比 PHP 解释器更聪明。感谢所有(试图)提供帮助的人。

标签: php curl file-get-contents


【解决方案1】:

试试urlencode

  $content = file_get_content(urlencode($url));
    print $content;

【讨论】:

  • 但是等等!这确实会在日志中产生错误,至少(编辑以适应评论): PHP 警告:file_get_contents(http%3A%2F%2Fpatft.uspto.gov%2Fnetacgi%2Fnph-Parser%3FSect1%3DPTO2%26Sect2%3DHITOFF% 26u%3D%2Fnetahtml%2FPTO%2Fsearch-adv.htm%26r%3D0%26p%3D1%26f%3DS%26l%3D50%26Query%3DAN%2F%22alied+signal%22%0D%0A+AND+%28% 28%28%28%28%28%28%28CCL%2F29%2F%24+OR+CCL%2F62%2F%24%29+OR+CCL%2F165%2F%24%29+OR+CCL%2F180% 2F%24%29+OR+CCL%2F236%2F%24%29+OR+CCL%2F237%2F%24%29+OR+CCL%2F241%2F%24%29+OR+CCL%2F248%2F% 24%29+OR+CCL%2F417%2F%24%29%26d%3DPTXT):无法打开流:第 21 行的参数无效
  • 我想我有问题,试试这个:$url = urlencode($url); $url = str_replace("%2f","/",$url); $url = str_replace("%3A",":",$url); $content = file_get_content($url);打印 $content;
  • 最终的答案是在将值分配给 $url 时使用 urlencode($name)。 (文件中的违规条目中间有空格,我忘记处理了。)
【解决方案2】:

在 PHP INI 中有一个 allow_url_fopen 的设置。确保将其设置为 true 或 1。

【讨论】:

  • 我在原帖中忘记的另一件事。是的,我检查过。实际上设置是 On 或 Off,如果它关闭,我给出的第一个示例也将不起作用。
猜你喜欢
  • 1970-01-01
  • 2014-01-19
  • 1970-01-01
  • 2015-07-10
  • 2014-10-13
  • 2012-06-19
  • 2011-06-23
  • 2015-03-08
  • 1970-01-01
相关资源
最近更新 更多