警告:fopen无法打开流:HTTP请求失败! HTTP / 1.1 406在/XAMPP/xamppfiles/htdocs/search.php中不可接受

时间:2014-06-03 15:53:01

标签: php http fopen

我正在尝试从pubmed获取搜索结果。

$query=(BRCA1[tiab]) OR (Breast cancer 1 gene[tiab])AND (Cancer[tiab])
$esearch = 'http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=$query&retmax=10&usehistory=y';
$handle = fopen($esearch, "r");
$rettype = "abstract"; //retreives abstract of the record, rather than full record
$retmode = "xml";

我收到此HTTP访问失败错误。

错误:

  

警告:fopen(http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=(BRCA1[tiab]) OR(乳腺癌1基因[tiab])AND(癌症[tiab])& retmax = 10& usehistory = y):无法打开流:HTTP请求失败!第60行的/Applications/XAMPP/xamppfiles/htdocs/search.php中不能接受HTTP / 1.1 406

当我直接粘贴网址时,http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=(BRCA1[tiab]) OR(乳腺癌1基因[tiab])和(癌症[tiab])& retmax = 10& usehistory = y我在页面中获得搜索结果但不是通过php脚本访问时。

1 个答案:

答案 0 :(得分:1)

这里有一些问题。首先,您在第一行有一个语法错误,其中您有没有引号的纯文本。我们可以通过替换这一行来解决这个问题:

$query=(BRCA1[tiab]) OR (Breast cancer 1 gene[tiab])AND (Cancer[tiab]) 

这一行:

$query = "(BRCA1[tiab]) OR (Breast cancer 1 gene[tiab])AND (Cancer[tiab])";

现在修复了语法错误。

其次,你的第二行有一个无声的字符串concat错误。如果要内联连接变量(不使用.运算符),则必须使用双引号,而不是单引号。让我们通过替换这一行来解决这个问题:

$esearch = 'http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=$query&retmax=10&usehistory=y'; 

这一行:

$esearch = "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=$query&retmax=10&usehistory=y"; 

最后,您不会对查询进行urlencoding,因此您在URL中获取了未编码的空格,并且正在弄乱fopen的URL。让我们在urlencode()中包装查询字符串:

$query = urlencode("(BRCA1[tiab]) OR (Breast cancer 1 gene[tiab])AND (Cancer[tiab])");
$esearch = "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=$query&retmax=10&usehistory=y"; 
$handle = fopen($esearch, "r"); 
$rettype = "abstract"; //retreives abstract of the record, rather than full record 
$retmode = "xml"; 

我在CLI上测试了这段代码,它似乎正常工作。