Я написал простой бит кода, чтобы проверить два параметра и перенаправить пользователя на ссылку.
error_reporting(E_ALL|E_STRICT); ini_set("display_errors", "On"); $secure_box=$_GET['query']; $fh = fopen('db.csv', 'r'); $now = date("dmY"); $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-файл не читается. Что я могу сделать ?
Это то, что я смог придумать. Надеюсь, это правильно.
<?php error_reporting(E_ALL|E_STRICT); ini_set("display_errors", "On"); $name_value = $_GET['query']; $fh = fopen('db.csv', 'r'); $now = date("dmY"); $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); } ?>
Весь файл не читается, потому что вы только вызывали fgetcsv
один раз. fgetcsv
только считывает по одной строке за раз, вам нужно поместить этот код в цикл.
Ниже приведен пример использования fgetcsv в цикле из php docs по адресу http://www.php.net/fgetcsv :
<?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); } ?>
Вы можете циклически прочитывать всю строку файла за строкой до EOF и проверять каждую строку по очереди.