Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
初学者帮助需要简单的PHP脚本_Php - Fatal编程技术网

初学者帮助需要简单的PHP脚本

初学者帮助需要简单的PHP脚本,php,Php,我是一个php的完全初学者(这里是我的第一张“海报”),而且我在教程中编写的一个小脚本中似乎遗漏了一些东西 脚本基本上要做的是从服务器上托管的txt文件中获取股票代码名,并输出从yahoo finance获取的历史价格 除了我从getCSVfile函数获取的内容不正确(我从yahoo错误页面获取html)之外,一切似乎都正常工作。然而,获取的URL是正确的,如果我手动输入目标URL,一切正常 这可能是一个基本的错误,但似乎找不到。似乎与“”和“”s相关 非常感谢你的帮助 Y 在createURL

我是一个php的完全初学者(这里是我的第一张“海报”),而且我在教程中编写的一个小脚本中似乎遗漏了一些东西

脚本基本上要做的是从服务器上托管的txt文件中获取股票代码名,并输出从yahoo finance获取的历史价格

除了我从getCSVfile函数获取的内容不正确(我从yahoo错误页面获取html)之外,一切似乎都正常工作。然而,获取的URL是正确的,如果我手动输入目标URL,一切正常

这可能是一个基本的错误,但似乎找不到。似乎与“”和“”s相关

非常感谢你的帮助 Y


在createURL函数中返回URL之前,请尝试使用urlencode。这个函数的代码应该是这样的

function createURL($ticker){
$currentMonth = date('n') - 1;
$currentDay = date('j');
$currentYear = date('Y');
$result = 'http://ichart.finance.yahoo.com/table.csv? s='.$ticker.'&a=07&b=19&c=2012&d=11&e=08&f=2012 &g=d&ignore=.csv';
return urlencode($result);
}

问题是您的URL确实包含一些不属于其中的空格:

$result = 'http://ichart.finance.yahoo.com/table.csv? s='.$ticker.'&a=07&b=19&c=2012&d=11&e=08&f=2012 &g=d&ignore=.csv';
                                                     ^                                               ^
试一试

相反


要注意这种错误,最好的方法是在浏览器中复制并粘贴调试输出,而不是键入调试输出,否则您经常会错过这些明显的小错误。

为了安全起见:您在浏览器中复制粘贴了$test URL,它会返回正确的结果?是,我在浏览器中回显了测试URL,它是正确的。然后从最简单的事情开始:
$test=“your\u correct\u URL”;回显文件获取内容($url)
如果这样做有效,但是
$test=createURL('GOOG');回显文件获取内容($url)
没有,那么
“您的\u更正\u url”
“创建url('GOOG'))
是不同的。您是否尝试过使用它。这篇文章可能也有帮助@NandakumarV如果我粘贴到url中,file\u get\u contents函数实际上可以工作,但与CreateUrl一起使用时不起作用谢谢您的回复。但是urlencode在目标url中的每个位置都添加了%,因此似乎无法以这种方式工作。
urlencode
o对字符进行编码,如/、&、:并将整个内容转换为不再是URL的内容。
urlencode
旨在对后来添加为URL参数的内容进行编码,因此它们不会与用于参数分离的&等内容相冲突。理解,感谢您的提示。但添加urlencode会产生以下结果:由于错误:文件获取内容(http%3A%2F%2Fichart.finance.yahoo.com%2Ftable.csv%3Fs%3DGOOG%26a%3D07%26b%3D19%26c%3D2012%26d%3D11%26e%3D08%26f%3D2012+%26g%3Dd%26ignore%3D.csv)[函数.文件获取内容]:无法打开流:@juanreyesv一般来说,这是个好主意。但是,这与本例无关,因为
urlencode('GOOG'))='GOOG'
@user1887478好的,您也可以尝试稍微更改一下getCSVfile函数。您可以尝试使用CURL。下面是一个示例:
函数get\u url\u contents($url){$crl=CURL\u init();$timeout=5;CURL\u setopt($crl,CURLOPT\u url,$url);CURL\u setopt($crl,CURLOPT\u RETURNTRANSFER,1);curl_setopt($crl,CURLOPT_CONNECTTIMEOUT,$timeout);$ret=curl_exec($crl);curl_close($crl);返回$ret;}
很抱歉,在上面的表单中编辑我的问题时刚刚添加的空格。但是,它们不在初始脚本中。最后,你是对的,这是一个愚蠢的空格问题!!非常感谢
$result = 'http://ichart.finance.yahoo.com/table.csv? s='.$ticker.'&a=07&b=19&c=2012&d=11&e=08&f=2012 &g=d&ignore=.csv';
                                                     ^                                               ^
$result = 'http://ichart.finance.yahoo.com/table.csv?s='.$ticker.'&a=07&b=19&c=2012&d=11&e=08&f=2012&g=d&ignore=.csv';