【发布时间】: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