2013-04-18 56 views
0

我正在构建一个股票分析网站,以使用股票信息,如价格历史等。我将实现一些我自己的算法,一旦我得到的数据,但我很难获取历史数据。该网站托管在biz.nf的免费网络托管上。包含的connect.php文件包含所有需要的sql信息并连接到数据库。我有错误检查,所以我知道这不是问题。我也尝试手动复制/粘贴链接,他们的工作,所以我正确地创建网址。我在这个网站和其他网站上发现了一些类似的话题,但是我没有看到明确的解决方案,或者为什么会发生这个问题。雅虎阻止我吗? 另外,我想提一提,我对PHP编程颇为陌生,但我在C和C++中有严肃的背景,所以如果可以的话,请在提供任何帮助时考虑这一点。 在此先感谢!PHP file_get_contents错误

这是我对于被执行index.php文件代码

代码:

<html> 
    <head> 
    <title>StockGrader</title> 
    </head> 
    <body bgcolor="green" text="black" link="red"> 
     <div id="header"> 
      <hr> 
      <h1>Welcome To <b><i>StockGrader</b></i><h1/></hr> 

<?php 
    include("phpINCLUDES/connect.php"); 

//function that creates a url from which to download data 
    function createURL($ticker) 
    {  $currentMonth = date("n") - 1; //"n" current month as a 1-digit number 
      $currentDay = date("j");  //"j" current day as a 1-digit number 
      $currentYear = date("Y");  //"Y" current year as a 4-digit number 
      echo "current URL is http://ichart.finance.yahoo.com/table.csv?s=$ticker&d=$currentMonth&e=$currentDay&f=$currentYear&g=d&a=3&b=10&c=2013&ignore=.csv"; 
      echo "\n\n\n"; 
      return "http://ichart.finance.yahoo.com/table.csv?s=$ticker&d=$currentMonth&e=$currentDay&f=$currentYear&g=d&a=3&b=10&c=2013&ignore=.csv"; 
    } 

//function to download data from a url and store into a file 
    function getCSVFile($URL, $outputFile) 
    { 
     **$content = file_get_contents($URL);**  //goes to the file located at this link and downloads the full file contents as a string of data 

     //replace a string which is the first parameter with the string in the second parameter. the string being replaced is in the third parameter 
     $content = str_replace("Date,Open,High,Low,Close,Volume,Adj Close","", $content); 

     //removes all white space 
     $content = trim($content); 

     //write a string into a file 
     file_put_contents($outputFile, $content);  
    } 

    function fileToDatabase($txtFile, $tableName) 
    { 
      $file = fopen($txtFile, "r"); 

      while(!feof($file)) 
      { 
       $line = fgets($file); 

       //separates a string 
       $pieces = explode(",", $line); 

       //stock variables 
       $date = $pieces[0]; 
       $open = $pieces[1]; 
       $high = $pieces[2]; 
       $low = $pieces[3]; 
       $close = $pieces[4]; 
       $volume = $pieces[5]; 
       // $adjclose = $pieces[6]; WE ARE NOT GOING TO USE THIS ONE USUALLY 
       $amount_change = $close - $open; 
       if($open!=0) 
       { $percent_change = ($amount_change/$open)*100; } 
       else $percent_change = 99999; 


       //check if table exists or not 
       $sql = "SELECT * FROM $tableName"; 
       $result = mysql_query($sql); 

       //if table doesn't exist 
       if(!$result) 
       { 
        $sql_2 = "CREATE TABLE $tableName (date DATE , PRIMARY KEY(date), open FLOAT, high FLOAT, low FLOAT, close FLOAT, volume INT, amount_change FLOAT, percent_change FLOAT)"; 
        mysql_query($sql_2); 
       } 

       //insert into table 
       $sql_3 = "INSERT INTO $tableName(date, open, high, low, close, volume, amount_change, percent_change) VALUES ('$date','$open','$high','$low','$close','$volume','$amount_change','$percent_change')"; 
       mysql_query(sql_3); 
      } 
      fclose($file); 
    } 

    function main() 
    { 
    //i don't have this file yet 
     $mainTickerFile = fopen("tickerMaster.txt","r"); 
     while(!feof($mainTickerFile)) 
     { 
      $companyTicker = fgets($mainTickerFile); 
      $companyTicker = trim($companyTicker); //trim whitespace just in case 

      $fileURL = createURL($companyTicker); //create url for each stock ticker 
      //create a directory path to each file for each ticker 
      $companyTxtFile = "txtFiles/".$companyTicker.".txt";   //I NEED TO CREATE THIS FOLDER ON MY SERVER 

      getCSVFile($fileURL, $companyTxtFile); 

      fileToDatabase($companyTxtFile, $companyTicker); 
     } 
    } 

    main(); 
?> 


       <p><a href="secondpage.html">Run Script</a></p> 
    </div> 
</body> 
</html> 

这是我收到的错误:我做了

[function.file-get-contents]: failed to open stream: Connection refused in /srv/disk12/1368341/www/nemanja.co.nf/index.php on line 26 

粗体文本(每边2个星号)出现错误的位置。

另外,即时托管网站的服务器allow_url_fopen = 1 如果是这样的情况yahoo.com阻止我有没有办法解决这个问题? 是否有另一种获取所有历史股票数据的方法?

+0

你有服务器上的权限设置是否正确?它拒绝连接,所以在那里出了问题。 – brbcoding

+0

就像我说过的,我对这个网络编程都很陌生,所以我不确定你的意思。我理解权限的概念,但你能否详细说明一下? 也许举个例子,可能是错的,我有什么权限有错。 – yot

回答

1

你确定你的共享主机允许远程URL连接 - 不太可能

大多数共享主机往往不设置了allow_url_fopen为true在php.ini

也许尝试使用curl代替