【问题标题】:How to generically open a file in php如何在php中通用打开文件
【发布时间】:2012-08-24 04:15:50
【问题描述】:

我一直在寻找有关此主题的问题,但未能找到我想要的东西。 This is for C++,我需要类似的 PHP。 This is for including php files,我只想读取一个CSV文件。

我有这个:

if(file_exists("data.csv")){
    echo "CSV file found";

    $csv_data = file_get_contents("data.csv"); 

    $lines = explode("\n", trim($csv_data));   

    $array = array();

    foreach ($lines as $line){
            $array[] = str_getcsv($line);

}else {echo "File not found";}

但我不想指定文件名 - 即一般加载/读取/打开文件。

这样做有什么简单的原因吗?没有意义,但有人告诉我不要在我的 PHP 脚本中进行任何硬编码。

提前致谢。

【问题讨论】:

  • 您的意思是要将"data.csv" 替换为变量?
  • 您可以将文件名字符串放入变量中。通常打开 文件是什么意思? 是一个特定的文件。
  • 文件位置从何而来?
  • 我想他想用文件句柄而不是文件名字符串来做。

标签: php file csv file-handling


【解决方案1】:

将您的代码放入函数中...

function open_file($file_name)
{
    if (!file_exists($file_name))
    {
        return false;
    }

    $csv_data = file_get_contents($file_name);
    $lines = explode("\n", trim($csv_data));

    $array = array();
    foreach ($lines as $line)
    {
        $array[] = str_getcsv($line);
    }

    return $array;
}

【讨论】:

    【解决方案2】:

    使用fgetcsv

    if(file_exists("data.csv")){
        echo "CSV file found";
        $handle = fopen("data.csv", "r");
        if(!$handle) die("Could not open file!");
        while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
          $num = count($data);
          $row++;
          for ($c=0; $c < $num; $c++) {
            echo $data[$c] . "<br />\n";
          }
        }
        fclose($handle); 
    
    }else {echo "File not found";}
    

    【讨论】:

    • 好的,我可能在这里遗漏了一些东西。 OP 声明“我不想指定文件名”和“我被告知在我的 PHP 脚本中没有任何硬编码”。但是您的答案的文件名非常硬编码。不过,这有三张赞成票?!为什么?
    • 因为,我相信,当我 7 小时前回答这个问题时,更多的是关于如何打开/解析 CSV 文件..虽然不知道赞成票 :)
    【解决方案3】:

    如果您的脚本中可能没有任何硬编码,则需要将这些硬编码的内容放入某种外部配置文件中。您必须将该配置文件的名称硬编码到引导程序或应用程序中首先出现的任何内容中。加载配置后,在需要的地方提供配置数据。不将配置数据硬编码到您的代码中将允许您创建更多可重用的组件和代码,例如CSV 阅读器可以读取任何 CSV 文件,而不是只能读取硬编码到其中的一个特定 CSV 文件的 CSV 阅读器。

    示例:

    // config.php
    <?php
    return array(
        'csvFile' => '/path/to/file.csv',
        …
    );
    
    // bootstrap.php
    <?php
    $config = include '/path/to/config.php';
    …
    
    // someFile.php
    <?php
    include '/path/to/bootstrap.php';
    $file = new SplFileObject($config['csvFile']);
    $file->setFlags(SplFileObject::READ_CSV);
    foreach ($file as $row) {
       // Do something with values
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 2018-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-05
      • 2018-02-13
      相关资源
      最近更新 更多