@PressOff

В чём ошибка загрузки файла Excel в Msql с помощью PHP?

Всем доброго времени суток!

Fatal error: Uncaught PHPExcel_Reader_Exception: Could not open price_download_25.12.2011.xls for reading! File does not exist.?
Собственно не видим мы файл/каталог.
Файл успешно сохраняется в папку, но PHPExcel не хочет с ним работать.

Задача загрузить данные из excel файла, закаченного пользователем через форму:

Форма:
<form action="/function_upload.php" method="POST" enctype="multipart/form-data" >
        <label for="upload_file"></label>
        <input type="file" name="upload_file" accept="application/vnd.ms-excel"value="Excel"/>
        <input type="hidden" name="value1">
        <br><br><input  type="submit" value="Загрузить Excel"/>
    </form>

PHP :
if ($_FILES['upload_file']['error'] > 0)
{
    echo '<p>Ошибка:</p>';
    
    switch ($_FILES['upload_file']['error'])
    {
        case 1: 
            echo 'Размер файла больше допустимого (upload_max_filesize в php.ini)';
            break;
        case 2: 
            echo 'Размер файла больше допустимого (max_file_ize в форме)';
            break;
        case 3: 
            echo 'Загружена только часть файла';
            break;
        case 4: 
            echo 'Файл не был загружен';
            break;
        case 6: 
            echo 'Загрузка не возможна: не задан временный каталог.';
            break;
        case 7: 
            echo 'Загрузка не выполнена: невозможна запись на сервер';
            break;
    }
    exit();
}

if ($_FILES['upload_file']['type'] != 'application/vnd.ms-excel')
{
    echo 'Данный файл не является форматом excel!';
    exit();
}

// указываем место где нужно сохранить файл
$upfile ='./uploads/' . $_FILES['upload_file']['name'];

// ограничение размера файла
$limit_size = 1*1024*1024; // 1 Mb
// корректные форматы файлов
$valid_format = array("xls");
// хранилище ошибок
$error_array = array();
// путь до нового файла
$path_file = "./uploads/";

$file_excel = $_FILES['upload_file']['name'];
// имя файла без формата
$file_excel_name = substr($file_excel, 0, -4);

if($_FILES){
    // валидация размера файла
    if($_FILES["upload_file"]["size"] > $limit_size){
        $error_array[] = "Размер файла превышает допустимый!";
    }
    // валидация формата файла
    $format = end(explode(".", $_FILES["upload_file"]["name"]));
    if(!in_array($format, $valid_format)){
        $error_array[] = "Формат файла не допустимый!";
    }
    // если не было ошибок
    if(empty($error_array)){
        // проверяем загружен ли файл
        if(is_uploaded_file($_FILES["upload_file"]["tmp_name"])){
            // сохраняем файл
            move_uploaded_file($_FILES["upload_file"]["tmp_name"], $path_file . $file_excel_name . ".$format" );
//            fopen($file_excel_name, r);
        }else{
            // Если файл не загрузился
            $error_array[] = "Ошибка загрузки!";
        }
    }       
}

$connection = new mysqli("localhost", "root", "", "eshop");
$connection->set_charset("utf8");

require_once './PHPExcel/Classes/PHPExcel.php';
require_once './PHPExcel/Classes/PHPExcel/IOFactory.php';

$PHPExcel_file = PHPExcel_IOFactory::load($file_excel_name);

foreach ($PHPExcel_file->getWorksheetIterator() as $worksheet) {
    $columns_str = "";
    $columns_count = PHPExcel_Cell::columnIndexFromString($worksheet->getHighestColumn());

    for ($column = 0; $column < $columns_count; $column++) {
        $columns_str .= ($columns_name_on1line ? "column" . $column : $worksheet->getCellByColumnAndRow($column, 1)->getCalculatedValue()) . ",";
    }

    $columns_str = substr($columns_str, 0, -1);

    $connection->query("DROP TABLE IF EXISTS exceltable");
    $connection->query("CREATE TABLE exceltable (" . str_replace(",", " TEXT NOT NULL,", $columns_str) . " TEXT NOT NULL)");

    $rows_count = $worksheet->getHighestRow();

    for ($row = 1; $row <= $rows_count; $row++) {
        $value_str = "";

        for ($column = 0; $column < $columns_count; $column++) {
            $merged_value = "";
            $cell = $worksheet->getCellByColumnAndRow($column, $row);

            foreach ($worksheet->getMergeCells() as $mergedCells) {
                if ($cell->isInRange($mergedCells)) {
                    $merged_value = $worksheet->getCell(explode(":", $mergedCells)[0])->getCalculatedValue();
                    break;
                }
            }

            $value_str .= "'" . (strlen($merged_value) == 0 ? $cell->getCalculatedValue() : $merged_value) . "',";
        }

        $value_str = substr($value_str, 0, -1);

        $connection->query("INSERT INTO exceltable (" . $columns_str . ") VALUES (" . $value_str . ")");
    }
}
  • Вопрос задан
  • 55 просмотров
Решения вопроса 1
@hecby_v
У вас $file_excel_name это название файла без пути и расширения
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы