2011-06-16 121 views
0

我写了一段简单的代码来测试两个参数并将用户转发到链接。PHP没有读取整个CSV文件

error_reporting(E_ALL|E_STRICT); 
ini_set("display_errors", "On"); 
$secure_box=$_GET['query']; 
$fh = fopen('db.csv', 'r'); 
$now = date("d.m.Y"); 
$data=fgetcsv($fh); 
$first_name=$data[0]; 
$date=$data[1]; 
$url=$data[2]; 
{ 
if($secure_box == $first_name AND $date>=$now) 
{ 
    header("Location: $url"); 
    exit(); 
} 
else 
    { 
    header("Location: http://localhost/x/delivery_method.html"); 
    } 
    exit; 
?> 

这里我的问题是整个CSV文件没有被读取。我能做什么 ?

+2

那么......你......只是读一行......或者我误解了一些东西? – deceze 2011-06-16 06:56:19

+1

什么是db.csv?它是由逗号分隔的单行,并且每个字段可以用双引号括起来吗? – Matthew 2011-06-16 06:58:10

+2

http://stackoverflow.com/questions/6332686/load-from-csv-and-forward-to-different-url上给出的答案显示了如何循环。 – Matthew 2011-06-16 07:00:14

回答

2

这是我一直上不来with..Hope这是正确的

<?php 
error_reporting(E_ALL|E_STRICT); 
ini_set("display_errors", "On"); 
$name_value = $_GET['query']; 
$fh = fopen('db.csv', 'r'); 
$now = date("d.m.Y"); 
$line = 1; 
if (($handle = fopen("db.csv", "r")) !== FALSE) 
{ 
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) 
    { 
     $num = count($data); 
     $line++; 
     for ($c = 0; $c < $num; $c++) 
     { 
      if ($name_value == $data[0] AND $data[1] >= $now) 
      { 
       header("Location: $data[2]"); 
       exit(); 
      } 
      else 
      { 
       header("Location: http://localhost/x/client_unauthorized.html"); 
      } 
     } 
    } 
    fclose($handle); 
} 
?> 
1

您可以循环逐行读取整个文件,直到EOF,然后依次检查每一行。

7

整个文件不会被读取,因为您只调用了fgetcsv一次。 fgetcsv一次只能读取一行,您需要将该代码放入循环中。

下面是如何在一个循环的http://www.php.net/fgetcsv使用fgetcsv,从PHP文档的例子:

<?php 
// Example #1 Read and print the entire contents of a CSV file 
$row = 1; 
if (($handle = fopen("test.csv", "r")) !== FALSE) { 
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 
     $num = count($data); 
     echo "<p> $num fields in line $row: <br /></p>\n"; 
     $row++; 
     for ($c=0; $c < $num; $c++) { 
      echo $data[$c] . "<br />\n"; 
     } 
    } 
    fclose($handle); 
} 
?>