【问题标题】:fopen() not finding file in same directory using phpfopen()没有使用php在同一目录中找到文件
【发布时间】:2014-07-03 14:23:49
【问题描述】:

我正在尝试使用 fopen() 将值从 csv 单元格传递到 Oracle 11g 数据库。

当用户通过 html 表单上传 xls 时,“创建”了 csv。从那里,我将“file.xls”转换为“file.csv”。到目前为止,我已经成功了。但是,在使用 fopen() [第 33 行,在注释中标记] 时,它无法找到明显创建的“file.csv”。使用 fopen() 是不是我的符号错误?

处理程序:

$allowed =  array('xls');
$filename = $_FILES['uploaded']['name'];
$file = $_FILES['uploaded']['tmp_name'];
$ext = pathinfo($filename, PATHINFO_EXTENSION);
if(in_array($ext,$allowed) ) {

    $inputFileType = 'Excel5';
    $inputFileName = $file;

    $objReader = PHPExcel_IOFactory::createReader($inputFileType);
    $objPHPExcelReader = $objReader->load($inputFileName);

    $loadedSheetNames = $objPHPExcelReader->getSheetNames();

    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcelReader, 'CSV');

    foreach($loadedSheetNames as $sheetIndex => $loadedSheetName) {
            $objWriter->setSheetIndex($sheetIndex);
            $objWriter->save('file'.'.csv');}

    }
    $fopen = fopen('file.csv', 'r'); //**line 33**//
    if($fopen) {
            while (($line = fgetcsv($files)) !== FALSE) {
            $csv_array[] = array_combine(range(1, count($line)), array_values($line));
            }
    }

请注意,我确实计划添加一个删除部分来删除“file.csv”。我只是用它来更新数据库,那对我来说没用。所以,如果有比保存它、更新数据库、删除它更有效的方法,我很想知道:)。谢谢,SO 社区!

【问题讨论】:

  • 您是否检查过您的$objWriter->save() 调用是否成功,或者是否首先执行?此外,您一开始就无需检查您的上传是否成功。
  • 你是对的,我的代码没有检查,但是我查看了数据库,文件保存成功。
  • 另外,保存调用看起来不正确。在第二个参数中指定扩展名似乎是多余的。为什么不只是->save('file.csv')?检查你的服务器是否只有file
  • ^^该代码确实有效。显然意味着我的代码是多余的。但是, fopen() 仍然没有打开它。我会试试马蒂的想法,让路径成为绝对路径

标签: php csv phpexcel fopen xls


【解决方案1】:

这完全取决于$objWriter->save() 将文件保存在哪里。如果那是与输入文件相同的文件夹,那么它将是您的临时目录(/tmp/ 最有可能在 *nix 上) 而且open() 不太可能默认出现在那里。

您可以通过将所有路径设为绝对路径来避免这些问题。

【讨论】:

  • 是的,你是对的 fopen() 没有找到正确的路径。菜鸟失误呵呵
猜你喜欢
  • 2020-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-04
  • 1970-01-01
相关资源
最近更新 更多