我正在尝试从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脚本访问时。
答案 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上测试了这段代码,它似乎正常工作。