【问题标题】:fopen a file with only part of title in phpf在php中打开一个只有部分标题的文件
【发布时间】:2016-03-16 16:43:06
【问题描述】:

所以我试图使用 fopen 从我的服务器调用一个文件,该文件每天都会自动下载,每次都使用相同的部分标题,但只想获取今天的文件。例如,如果文件是 file20160310.csv,我可以使用$file = fopen('file'. $today . '.csv', 'r') or die('cant open file'); 获取它,其中$today = date("m-d-y"); (但文件名是 file20160310875647.csv 并且日期之后的数字是随机的)有没有办法在我 fopen 时从标题中删除这些数字(我无法更改它被锁定的文件)

解决方案

解决方案——所以下面的两个答案都有效,但我使用了 T0xicCode 的答案来包含 .$today。在 fgetcsv 帮助的答案和鸡蛋答案中

$list = glob('ShipToUsShipments'.$today .'*.csv');

$文件名 = $list[0];

$file = fopen($filename, 'r') 或 die('无法打开文件');

fetcsv($file,1000,",");

($line = fgetcsv(fopen($file))) { echo $line[0]; }

【问题讨论】:

  • 试试file20160310*.csv

标签: php csv fopen


【解决方案1】:

尝试使用glob() 返回与fileYYYYMMDD* 格式匹配的文件列表:

$list = glob('file20160310*.csv');
$file = $list[0] // Assuming there'll only be one match for each day.
$file = fopen($file, 'r') or die('cant open file');

如果每天有多个文件,那么您可以:

$list = glob('file20160310*.csv');
foreach ($list AS $file) {
    fopen($file, 'r') or die('cant open file');
}

【讨论】:

  • 我试过这个,我得到这个警告警告:fgetcsv() 期望参数 1 是资源,/chroot/ 中给出的字符串
  • 这取决于您对fgetcsv 的使用。在最简单的形式中,应该是while($line = fgetcsv(fopen($file))) { echo $line[0]; } 来显示每行的第一个字段。 fgetcsv() 不在您的问题中,因此很难提供明确的答案。
  • 对不起,我把那部分留在这里是我现在拥有的$list = glob('file'. $today . '*.csv'); $filename = $list[0]; $file = fopen($filename, 'r') or die('cant open file'); fgetcsv($file,1000,","); //iterating through csv file inserting data into store_form table while (($data=fgetcsv($file,1000,","))!==FALSE)
【解决方案2】:

fopen 需要文件的确切名称。您将需要找到文件的确切名称。您将能够使用glob 找出文件的完整名称:

$list = glob('file' . $today . '*.csv');
$filename = $list[0];
$file = fopen($filename, 'r') or die('cant open file');

glob 返回一个数组,因此您必须对其进行索引。如果多个文件与给定的模式匹配,您必须弄清楚要使用哪一个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-11
    • 2016-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-17
    • 1970-01-01
    相关资源
    最近更新 更多