Загрузка файла через php input ошибка не работает

Помогите пожалуйста, не работает форма загрузки файлов:

<form action="forms.php" method="POST" enctype="multipart/form-data">
            Описание:<br> <textarea rows="15" cols="100" name="g_description"></textarea><br><br>
            <input name="gfile" type="file" accept="image/*">
            <br><br>
            <input type="submit" value="Добавить">
</form>

Так выглядит скрипт, обрабатывающий форму:

$destination = $_SERVER['DOCUMENT_ROOT']. '/uploads/';
$fileTempName = $_FILES['gfile']['tmp_name'];
if (is_uploaded_file($fileTempName)) {
    $newFilename = $destination .$_FILES['gfile']['name'];

    //Перемещаем файл из временной папки в указанную
    if (move_uploaded_file($fileTempName, $newFilename)) {
        echo 'Файл сохранен под именем '. $newFilename;
    } else {
        echo 'Не удалось осуществить сохранение файла';
    }
} else {
    echo 'Файл не был загружен на сервер';
}

задан 7 мая 2018 в 20:32

Иван Студеникин's user avatar

2

Вот пример простейшей реализации

<?php
    if(isset($_POST['go'])){
        $err = array();#Массив с ошибками
        #Проверки
        if(!is_uploaded_file($_FILES["filename"]["tmp_name"])){
            $err[] = "Ошибка загрузки файла";
        }
        if($_FILES["filename"]['error']!= 0){
            $err[] = 

"Ошибка загрузки файла";
        };
        if($_FILES["filename"]['size'] > 10485760){
            $err[] = "Файл слишком большой";
        };

if(count($err) == 0){
    //Если файл загружен успешно, то перемещаем в конечную директорию
    move_uploaded_file($_FILES["filename"]["tmp_name"], $_SERVER['DOCUMENT_ROOT']."/Files/".$_FILES["filename"]["name"]);
} else{
    #Вывод ошибок проверок
    foreach($err AS $error){
        print $error."<br>";
    }
}
}
?>
<input type="hidden" name="MAX_FILE_SIZE" value="30000">
<form method="post" enctype="multipart/form-data">
    <input type="file" name="filename" class="select_file"><br>
    <button name="go" class="login_button">Загрузить</button>
</form>

ответ дан 8 мая 2018 в 18:10

Юрий's user avatar

ЮрийЮрий

5474 серебряных знака15 бронзовых знаков

Всем привет, я совсем недавно начал углубляться в разработку и столкнулся с одной проблемой! Помогите, пожалуйста, кто разбирается, целый день вожусь с этим. В php массиве список полей формы с указанием, какие из них уже загружены. Загруженные поля должны отображаться с пометкой «Уже загружен» и ним не должно быть возможности загружать файл. В общем после того, как добавил проверку загруженных файлов, файлы перестали загружаться в нужный каталог.

Код PHP:

<?php
session_start(); 
$heading = 'Название компании';
$field = 'Текстовое поле(файл)';

// $blacklist = [['Устав', true], ['Расчетный счет', false], ['Паспорт ответственного', true], ['ИНН ответственного', false]];
$blacklist = array(
  'file_1' => array('name' => 'Устав', 'uploaded' => true),
  'file_2' => array('name' => 'Расчетный счет', 'uploaded' => false),
  'file_3' => array('name' => 'Паспорт ответственного', 'uploaded' => true),
  'file_4' => array('name' => 'ИНН ответственного', 'uploaded' => false)
);

// echo key($blacklist);

?>

<!DOCTYPE html>
<html>
<head>
  <title>Контактные данные</title>
  <link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
  <?php
  ini_set('display_errors', 1);
  ini_set('display_startup_errors', 1);
  error_reporting(E_ALL);

  if (isset($_SESSION['message']) && $_SESSION['message'])
  {
    printf('<b>%s</b>', $_SESSION['message']);
    unset($_SESSION['message']);
  }
  ?>
  <form method="POST" action="upload.php" id="upload-container" enctype="multipart/form-data">
    <div id="myModal" class="form-zvonok"> 
      <div id="myModal1" class="form-zvonok1">
        <h2> <?php echo $heading; ?> </h2>
        <hr class="hr-up">
        <?php foreach ($blacklist as $key => $file)  {?>
          <?php if ($file['uploaded']): { ?>
            <?php echo '<p>Имя поля: '.$file['name'].'</p>'
            ?>
            <p><?php echo 'Файл загружен!' ?>
            <hr>
          <?php } else: { ?>
          <div>
            <?php echo "Имя поля: ".$file['name']; ?>
            <?php echo '<input type="file" name= ".$key." /><br> Файл не загружен' ?>
          </div>
          <hr>
        <?php } ?>
          <?php endif ?>
          <?php
        } ?>
        <br>
        <input type="checkbox" id="myBtn" required><label>Нажимая кнопку «Отправить», я даю свое согласие на обработку моих персональных данных, в соответствии с Федеральным законом от 27.07.2006 года №152-ФЗ «О персональных данных», на условиях и для целей, определенных в Согласии на обработку персональных данных <span>*</span></label>
        <br>
        <br>

        <input type="submit" id="myBtn" name="uploadBtn" value="Отправить" onclick="SendFile()"/>
        <hr class="hr-down">
      </div>
    </div>
  </form>
</body>
</html>

Обработчик формы:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>Результат загрузки</title>
	<link rel="stylesheet" type="text/css" href="upload_style.css">
</head>
<?php
session_start();

$message = ''; 
if (isset($_POST['uploadBtn']) && $_POST['uploadBtn'] == 'Upload')
{
  if (isset($_FILES['file_1']) && $_FILES['file_1']['error'] === UPLOAD_ERR_OK)
  {
    // get details of the uploaded file
    $fileTmpPath = $_FILES['file_1']['tmp_name'];
    $fileName = $_FILES['file_1']['name'];
    $fileSize = $_FILES['file_1']['size'];
    $fileType = $_FILES['file_1']['type'];
    $fileNameCmps = explode(".", $fileName);
    $fileExtension = strtolower(end($fileNameCmps));

    // sanitize file-name
    $newFileName = md5(time() . $fileName) . '.' . $fileExtension;

    // check if file has one of the following extensions
    $allowedfileExtensions = array('jpg', 'gif', 'png', 'zip', 'txt', 'xls', 'doc');

    if (in_array($fileExtension, $allowedfileExtensions))
    {
      // directory in which the uploaded file will be moved
      $uploadFileDir = './uploaded_files/';
      $dest_path = $uploadFileDir . $newFileName;

      if(move_uploaded_file($fileTmpPath, $dest_path)) 
      {
        $message ='Файл успешно загружен.';
      }
      else 
      {
      	$message = 'При перемещении файла в каталог загрузки произошла ошибка. Убедитесь, что каталог загрузки доступен для записи веб-сервером.';
      }
    }
    else
    {
      $message = 'Загрузка не удалась. Допустимые типы файлов: ' . implode(',', $allowedfileExtensions);
    }
  }
  else
  {
  	$message = 'При загрузке файла произошла ошибка. Пожалуйста, проверьте следующую ошибку.<br>';
  	$message .= 'Error:' . $_FILES['file_1']['error'];
  }
}
$_SESSION['message'] = $message;
header("Location: index.php");
?>
</html>

Здесь VPS на BrainyCP за 2$ в месяц, а здесь 50GB шаред-хостинг на BrainyCP за 1.9$ в месяц

lexkosha

Сообщения: 6
Зарегистрирован: Сб июн 12, 2021 3:25 pm

Работа с сокетами Ошибка! Не работает Bitrix

Всем привет!
ребята подскажите как исправить ошибку «Работа с сокетами Ошибка! Не работает»

Делаю тест системы. Выдает ошибку, читал что нужно править файл хост, поправил как написано не помогло.
CentOS 7

Журнал проверки системы

2021-Jun-12 15:24:02 Наличие необходимых модулей php (check_php_modules): Ok
Все необходимые модули установлены
2021-Jun-12 15:24:02 Обязательные параметры PHP (check_php_settings): Ok
Настройки правильные
2021-Jun-12 15:24:02 Модули веб-сервера (check_security): Ok
Конфликтов не выявлено
2021-Jun-12 15:24:02 Значения переменных сервера (check_server_vars): Ok
Корректные
2021-Jun-12 15:24:03 Сохранение сессии (check_session): Ok
50% done
2021-Jun-12 15:24:03 Сохранение сессии (check_session): Ok
Успешно
2021-Jun-12 15:24:03 Параметры настройки UTF (mbstring и константа BX_UTF) (check_mbstring): Ok
Правильные. Сайт работает в UTF кодировке
2021-Jun-12 15:24:03 Служебные скрипты в корне сайта (check_install_scripts): Ok
Отсутствуют
2021-Jun-12 15:24:03 Работа с сокетами (check_socket): Fail
Connection to site.ru:80 Success
== Request ==
GET /bitrix/admin/site_checker.php?test_type=socket_test&unique_id=092382390232392832932 HTTP/1.1
Host: site.ru

== Response ==
HTTP/1.1 404 Not Found
Server: nginx/1.20.1
Date: Sat, 12 Jun 2021 15:24:03 GMT
Content-Type: text/html; charset=iso-8859-1
Content-Length: 196
Connection: keep-alive

== Body ==
<!DOCTYPE HTML PUBLIC «-//IETF//DTD HTML 2.0//EN»>
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL was not found on this server.</p>
</body></html>

==========

Ошибка! Не работает
2021-Jun-12 15:24:03 Выполнение агентов на cron (check_bx_crontab): Warning
Замечание. Агенты выполняются на хитах, рекомендуется перевести выполнение агентов на cron
2021-Jun-12 15:24:03 Параметры подключения к базе данных (check_dbconn_settings): Ok
Успешно
2021-Jun-12 15:24:03 Лишний вывод в файлах конфигурации (check_dbconn): Warning
Замечание. Не удалось проверить из-за ошибки в работе с сокетами
2021-Jun-12 15:24:03 Сохранение сессии без UserAgent (check_session_ua): Warning
Замечание. Не удалось проверить из-за ошибки в работе с сокетами
2021-Jun-12 15:24:03 Настройки сайтов (check_sites): Ok
Правильные
2021-Jun-12 15:24:03 Передача объектов по ссылке (check_clone): Ok
Успешно
2021-Jun-12 15:24:03 Размер стека и pcre.recursion_limit (check_pcre_recursion): Warning
Замечание. Не удалось проверить из-за ошибки в работе с сокетами
2021-Jun-12 15:24:03 Загрузка файла (check_upload): Warning
Замечание. Не удалось проверить из-за ошибки в работе с сокетами
2021-Jun-12 15:24:03 Загрузка файла больше 4Мб (check_upload_big): Warning
Замечание. Не удалось проверить из-за ошибки в работе с сокетами
2021-Jun-12 15:24:03 Загрузка файла через php://input (check_upload_raw): Warning
Замечание. Не удалось проверить из-за ошибки в работе с сокетами
2021-Jun-12 15:24:03 Передача POST запроса с большим числом параметров (check_post): Warning
Замечание. Не удалось проверить из-за ошибки в работе с сокетами
2021-Jun-12 15:24:03 Отправка почты (check_mail): Ok
Успешно
2021-Jun-12 15:24:03 Отправка почтового сообщения больше 64Кб (check_mail_big): Ok
Успешно
2021-Jun-12 15:24:03 Проверка на наличие неотправленных сообщений (check_mail_b_event): Ok
Успешно
2021-Jun-12 15:24:03 Внутреннее перенаправление (функция LocalRedirect) (check_localredirect): Warning
Замечание. Не удалось проверить из-за ошибки в работе с сокетами
2021-Jun-12 15:24:03 Фактическое ограничение памяти (check_memory_limit): Warning
Замечание. Не удалось проверить из-за ошибки в работе с сокетами
2021-Jun-12 15:24:04 Работа с файлами кеша (check_cache): Ok
Успешно
2021-Jun-12 15:24:04 Доступ к серверу обновлений (check_update): Ok
Успешно
2021-Jun-12 15:24:04 HTTP авторизация (check_http_auth): Warning
Замечание. Не удалось проверить из-за ошибки в работе с сокетами
2021-Jun-12 15:24:04 Создание и запуск файла (check_exec): Warning
Замечание. Не удалось проверить из-за ошибки в работе с сокетами
2021-Jun-12 15:24:04 Функция getimagesize для swf (check_getimagesize): Ok
Успешно
2021-Jun-12 15:24:04 Версия MySQL-сервера (check_mysql_bug_version): Ok
Успешно
2021-Jun-12 15:24:05 Время на БД и веб-сервере (check_mysql_time): Fail
Ошибка! Время отличается на 10800 секунд
2021-Jun-12 15:24:05 Режим работы MySQL (check_mysql_mode): Ok
Успешно
2021-Jun-12 15:24:05 Кодировка соединения (check_mysql_connection_charset): Ok
character_set_connection=utf8, collation_connection=utf8_unicode_ci, character_set_results=utf8
Успешно
2021-Jun-12 15:24:05 Кодировка базы данных (check_mysql_db_charset): Ok
CHARSET=utf8, COLLATION=utf8_unicode_ci
Успешно
97% done
2021-Jun-12 15:24:22 Структура базы данных (check_mysql_table_structure): Ok
Успешно


Аватара пользователя

sbury

Сообщения: 1157
Зарегистрирован: Вт фев 06, 2018 7:51 am

Re: Работа с сокетами Ошибка! Не работает Bitrix

Сообщение

sbury » Сб июн 12, 2021 9:39 pm

в файле /etc/hosts, первой строкой добавьте запись
127.0.0.1 _ваш_домен_

при помощи команды
hostname
проверьте какой он у вас вообще прописан в системе. bitrix требует запись полного доменного имени в системе

Второе, сертификат SSL должен быть выдан данному домену.
И третье, если в DNS есть запись ipv6 типа АААА, и она не подключена к домену, или есть не существующая, она должна быть удалена

Пока хоть одно из этих условий не выполнено , вы будете получать данную ошибку.



Аватара пользователя

sbury

Сообщения: 1157
Зарегистрирован: Вт фев 06, 2018 7:51 am

Re: Работа с сокетами Ошибка! Не работает Bitrix

Сообщение

sbury » Вс июн 13, 2021 8:03 am

показывайте что прописано. А так же вывод hostname. Можете в личку


lexkosha

Сообщения: 6
Зарегистрирован: Сб июн 12, 2021 3:25 pm

Re: Работа с сокетами Ошибка! Не работает Bitrix

Сообщение

lexkosha » Вт авг 31, 2021 8:44 pm

Сегодня попробовал по новой все поднять. К сожалению решить проблему не удалось. Может кто то сталкивался и победил?


confignsk

Сообщения: 14
Зарегистрирован: Пн дек 21, 2020 1:38 am

Re: Работа с сокетами Ошибка! Не работает Bitrix

Сообщение

confignsk » Чт окт 14, 2021 8:19 am

Всем добрый день! Какие варианты еще решений можно использовать ?



Помогите пожалуйста, не работает форма загрузки файлов:

<form action="forms.php" method="POST" enctype="multipart/form-data">
            Описание:<br> <textarea rows="15" cols="100" name="g_description"></textarea><br><br>
            <input name="gfile" type="file" accept="image/*">
            <br><br>
            <input type="submit" value="Добавить">
</form>

Так выглядит скрипт, обрабатывающий форму:

$destination = $_SERVER['DOCUMENT_ROOT']. '/uploads/';
$fileTempName = $_FILES['gfile']['tmp_name'];
if (is_uploaded_file($fileTempName)) {
    $newFilename = $destination .$_FILES['gfile']['name'];

    //Перемещаем файл из временной папки в указанную
    if (move_uploaded_file($fileTempName, $newFilename)) {
        echo 'Файл сохранен под именем '. $newFilename;
    } else {
        echo 'Не удалось осуществить сохранение файла';
    }
} else {
    echo 'Файл не был загружен на сервер';
}

задан 7 мая 2018 в 20:32

Иван Студеникин's user avatar

2

Вот пример простейшей реализации

<?php
    if(isset($_POST['go'])){
        $err = array();#Массив с ошибками
        #Проверки
        if(!is_uploaded_file($_FILES["filename"]["tmp_name"])){
            $err[] = "Ошибка загрузки файла";
        }
        if($_FILES["filename"]['error']!= 0){
            $err[] = 

"Ошибка загрузки файла";
        };
        if($_FILES["filename"]['size'] > 10485760){
            $err[] = "Файл слишком большой";
        };

if(count($err) == 0){
    //Если файл загружен успешно, то перемещаем в конечную директорию
    move_uploaded_file($_FILES["filename"]["tmp_name"], $_SERVER['DOCUMENT_ROOT']."/Files/".$_FILES["filename"]["name"]);
} else{
    #Вывод ошибок проверок
    foreach($err AS $error){
        print $error."<br>";
    }
}
}
?>
<input type="hidden" name="MAX_FILE_SIZE" value="30000">
<form method="post" enctype="multipart/form-data">
    <input type="file" name="filename" class="select_file"><br>
    <button name="go" class="login_button">Загрузить</button>
</form>

ответ дан 8 мая 2018 в 18:10

Юрий's user avatar

ЮрийЮрий

5474 серебряных знака15 бронзовых знаков

Всем привет, я совсем недавно начал углубляться в разработку и столкнулся с одной проблемой! Помогите, пожалуйста, кто разбирается, целый день вожусь с этим. В php массиве список полей формы с указанием, какие из них уже загружены. Загруженные поля должны отображаться с пометкой «Уже загружен» и ним не должно быть возможности загружать файл. В общем после того, как добавил проверку загруженных файлов, файлы перестали загружаться в нужный каталог.

Код PHP:

<?php
session_start(); 
$heading = 'Название компании';
$field = 'Текстовое поле(файл)';

// $blacklist = [['Устав', true], ['Расчетный счет', false], ['Паспорт ответственного', true], ['ИНН ответственного', false]];
$blacklist = array(
  'file_1' => array('name' => 'Устав', 'uploaded' => true),
  'file_2' => array('name' => 'Расчетный счет', 'uploaded' => false),
  'file_3' => array('name' => 'Паспорт ответственного', 'uploaded' => true),
  'file_4' => array('name' => 'ИНН ответственного', 'uploaded' => false)
);

// echo key($blacklist);

?>

<!DOCTYPE html>
<html>
<head>
  <title>Контактные данные</title>
  <link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
  <?php
  ini_set('display_errors', 1);
  ini_set('display_startup_errors', 1);
  error_reporting(E_ALL);

  if (isset($_SESSION['message']) && $_SESSION['message'])
  {
    printf('<b>%s</b>', $_SESSION['message']);
    unset($_SESSION['message']);
  }
  ?>
  <form method="POST" action="upload.php" id="upload-container" enctype="multipart/form-data">
    <div id="myModal" class="form-zvonok"> 
      <div id="myModal1" class="form-zvonok1">
        <h2> <?php echo $heading; ?> </h2>
        <hr class="hr-up">
        <?php foreach ($blacklist as $key => $file)  {?>
          <?php if ($file['uploaded']): { ?>
            <?php echo '<p>Имя поля: '.$file['name'].'</p>'
            ?>
            <p><?php echo 'Файл загружен!' ?>
            <hr>
          <?php } else: { ?>
          <div>
            <?php echo "Имя поля: ".$file['name']; ?>
            <?php echo '<input type="file" name= ".$key." /><br> Файл не загружен' ?>
          </div>
          <hr>
        <?php } ?>
          <?php endif ?>
          <?php
        } ?>
        <br>
        <input type="checkbox" id="myBtn" required><label>Нажимая кнопку «Отправить», я даю свое согласие на обработку моих персональных данных, в соответствии с Федеральным законом от 27.07.2006 года №152-ФЗ «О персональных данных», на условиях и для целей, определенных в Согласии на обработку персональных данных <span>*</span></label>
        <br>
        <br>

        <input type="submit" id="myBtn" name="uploadBtn" value="Отправить" onclick="SendFile()"/>
        <hr class="hr-down">
      </div>
    </div>
  </form>
</body>
</html>

Обработчик формы:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>Результат загрузки</title>
	<link rel="stylesheet" type="text/css" href="upload_style.css">
</head>
<?php
session_start();

$message = ''; 
if (isset($_POST['uploadBtn']) && $_POST['uploadBtn'] == 'Upload')
{
  if (isset($_FILES['file_1']) && $_FILES['file_1']['error'] === UPLOAD_ERR_OK)
  {
    // get details of the uploaded file
    $fileTmpPath = $_FILES['file_1']['tmp_name'];
    $fileName = $_FILES['file_1']['name'];
    $fileSize = $_FILES['file_1']['size'];
    $fileType = $_FILES['file_1']['type'];
    $fileNameCmps = explode(".", $fileName);
    $fileExtension = strtolower(end($fileNameCmps));

    // sanitize file-name
    $newFileName = md5(time() . $fileName) . '.' . $fileExtension;

    // check if file has one of the following extensions
    $allowedfileExtensions = array('jpg', 'gif', 'png', 'zip', 'txt', 'xls', 'doc');

    if (in_array($fileExtension, $allowedfileExtensions))
    {
      // directory in which the uploaded file will be moved
      $uploadFileDir = './uploaded_files/';
      $dest_path = $uploadFileDir . $newFileName;

      if(move_uploaded_file($fileTmpPath, $dest_path)) 
      {
        $message ='Файл успешно загружен.';
      }
      else 
      {
      	$message = 'При перемещении файла в каталог загрузки произошла ошибка. Убедитесь, что каталог загрузки доступен для записи веб-сервером.';
      }
    }
    else
    {
      $message = 'Загрузка не удалась. Допустимые типы файлов: ' . implode(',', $allowedfileExtensions);
    }
  }
  else
  {
  	$message = 'При загрузке файла произошла ошибка. Пожалуйста, проверьте следующую ошибку.<br>';
  	$message .= 'Error:' . $_FILES['file_1']['error'];
  }
}
$_SESSION['message'] = $message;
header("Location: index.php");
?>
</html>

I am pretty new to Elgg and I am trying to allow users to upload a video. My problem could also just be php related, however.

So I have set up my form with the following code:

echo elgg_view("input/file", array('name' => 'video', 'accept' => 'video/*'));

which sets up a control to allow users to upload files. My action file is filled with a lot of defensive programming to ensure that the file is there. When I try to upload a video, I get the following error which points me to this snippet of code:

// must not be empty if a file is present in the upload
    if( empty($_FILES['video']['name']) ) {
        $error = elgg_echo('No file to upload!');
        register_error( $error );
        forward( REFERER );
    }

I am completely lost at where the problem may lie, I have been trying to achieve this for about 2 days now. I have been referring to a bunch of other plugins which make use of file uploads in Elgg, such as the file plugin and the TidyPics plugin.

All help and tips are appreciated in advance. Thank you.

<form action="/upload.php" method="post" enctype="multipart/form-data">
	<input type="file" name="file">
	<input type="submit" value="Отправить">
</form>

HTML

<form action="/upload.php" method="post" enctype="multipart/form-data">
	<input type="file" name="file[]" multiple>
	<input type="submit" value="Отправить">
</form>

HTML

// Название <input type="file">
$input_name = 'file';

// Разрешенные расширения файлов.
$allow = array();

// Запрещенные расширения файлов.
$deny = array(
	'phtml', 'php', 'php3', 'php4', 'php5', 'php6', 'php7', 'phps', 'cgi', 'pl', 'asp', 
	'aspx', 'shtml', 'shtm', 'htaccess', 'htpasswd', 'ini', 'log', 'sh', 'js', 'html', 
	'htm', 'css', 'sql', 'spl', 'scgi', 'fcgi'
);

// Директория куда будут загружаться файлы.
$path = __DIR__ . '/uploads/';

if (isset($_FILES[$input_name])) {
	// Проверим директорию для загрузки.
	if (!is_dir($path)) {
		mkdir($path, 0777, true);
	}

	// Преобразуем массив $_FILES в удобный вид для перебора в foreach.
	$files = array();
	$diff = count($_FILES[$input_name]) - count($_FILES[$input_name], COUNT_RECURSIVE);
	if ($diff == 0) {
		$files = array($_FILES[$input_name]);
	} else {
		foreach($_FILES[$input_name] as $k => $l) {
			foreach($l as $i => $v) {
				$files[$i][$k] = $v;
			}
		}		
	}	
	
	foreach ($files as $file) {
		$error = $success = '';

		// Проверим на ошибки загрузки.
		if (!empty($file['error']) || empty($file['tmp_name'])) {
			switch (@$file['error']) {
				case 1:
				case 2: $error = 'Превышен размер загружаемого файла.'; break;
				case 3: $error = 'Файл был получен только частично.'; break;
				case 4: $error = 'Файл не был загружен.'; break;
				case 6: $error = 'Файл не загружен - отсутствует временная директория.'; break;
				case 7: $error = 'Не удалось записать файл на диск.'; break;
				case 8: $error = 'PHP-расширение остановило загрузку файла.'; break;
				case 9: $error = 'Файл не был загружен - директория не существует.'; break;
				case 10: $error = 'Превышен максимально допустимый размер файла.'; break;
				case 11: $error = 'Данный тип файла запрещен.'; break;
				case 12: $error = 'Ошибка при копировании файла.'; break;
				default: $error = 'Файл не был загружен - неизвестная ошибка.'; break;
			}
		} elseif ($file['tmp_name'] == 'none' || !is_uploaded_file($file['tmp_name'])) {
			$error = 'Не удалось загрузить файл.';
		} else {
			// Оставляем в имени файла только буквы, цифры и некоторые символы.
			$pattern = "[^a-zа-яё0-9,~!@#%^-_$?(){}[].]";
			$name = mb_eregi_replace($pattern, '-', $file['name']);
			$name = mb_ereg_replace('[-]+', '-', $name);
			
			// Т.к. есть проблема с кириллицей в названиях файлов (файлы становятся недоступны).
			// Сделаем их транслит:
			$converter = array(
				'а' => 'a',   'б' => 'b',   'в' => 'v',    'г' => 'g',   'д' => 'd',   'е' => 'e',
				'ё' => 'e',   'ж' => 'zh',  'з' => 'z',    'и' => 'i',   'й' => 'y',   'к' => 'k',
				'л' => 'l',   'м' => 'm',   'н' => 'n',    'о' => 'o',   'п' => 'p',   'р' => 'r',
				'с' => 's',   'т' => 't',   'у' => 'u',    'ф' => 'f',   'х' => 'h',   'ц' => 'c',
				'ч' => 'ch',  'ш' => 'sh',  'щ' => 'sch',  'ь' => '',    'ы' => 'y',   'ъ' => '',
				'э' => 'e',   'ю' => 'yu',  'я' => 'ya', 
			
				'А' => 'A',   'Б' => 'B',   'В' => 'V',    'Г' => 'G',   'Д' => 'D',   'Е' => 'E',
				'Ё' => 'E',   'Ж' => 'Zh',  'З' => 'Z',    'И' => 'I',   'Й' => 'Y',   'К' => 'K',
				'Л' => 'L',   'М' => 'M',   'Н' => 'N',    'О' => 'O',   'П' => 'P',   'Р' => 'R',
				'С' => 'S',   'Т' => 'T',   'У' => 'U',    'Ф' => 'F',   'Х' => 'H',   'Ц' => 'C',
				'Ч' => 'Ch',  'Ш' => 'Sh',  'Щ' => 'Sch',  'Ь' => '',    'Ы' => 'Y',   'Ъ' => '',
				'Э' => 'E',   'Ю' => 'Yu',  'Я' => 'Ya',
			);

			$name = strtr($name, $converter);
			$parts = pathinfo($name);

			if (empty($name) || empty($parts['extension'])) {
				$error = 'Недопустимое тип файла';
			} elseif (!empty($allow) && !in_array(strtolower($parts['extension']), $allow)) {
				$error = 'Недопустимый тип файла';
			} elseif (!empty($deny) && in_array(strtolower($parts['extension']), $deny)) {
				$error = 'Недопустимый тип файла';
			} else {
				// Чтобы не затереть файл с таким же названием, добавим префикс.
				$i = 0;
				$prefix = '';
				while (is_file($path . $parts['filename'] . $prefix . '.' . $parts['extension'])) {
		  			$prefix = '(' . ++$i . ')';
				}
				$name = $parts['filename'] . $prefix . '.' . $parts['extension'];

				// Перемещаем файл в директорию.
				if (move_uploaded_file($file['tmp_name'], $path . $name)) {
					// Далее можно сохранить название файла в БД и т.п.
					$success = 'Файл «' . $name . '» успешно загружен.';
				} else {
					$error = 'Не удалось загрузить файл.';
				}
			}
		}
		
		// Выводим сообщение о результате загрузки.
		if (!empty($success)) {
			echo '<p>' . $success . '</p>';		
		} else {
			echo '<p>' . $error . '</p>';
		}
	}
}

PHP

I am pretty new to Elgg and I am trying to allow users to upload a video. My problem could also just be php related, however.

So I have set up my form with the following code:

echo elgg_view("input/file", array('name' => 'video', 'accept' => 'video/*'));

which sets up a control to allow users to upload files. My action file is filled with a lot of defensive programming to ensure that the file is there. When I try to upload a video, I get the following error which points me to this snippet of code:

// must not be empty if a file is present in the upload
    if( empty($_FILES['video']['name']) ) {
        $error = elgg_echo('No file to upload!');
        register_error( $error );
        forward( REFERER );
    }

I am completely lost at where the problem may lie, I have been trying to achieve this for about 2 days now. I have been referring to a bunch of other plugins which make use of file uploads in Elgg, such as the file plugin and the TidyPics plugin.

All help and tips are appreciated in advance. Thank you.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
if ($name <> '' AND $price <> 0 AND $rate <> 0 AND $description <>'' AND $requirements<>'' ) {
    /* Фото иконки */
    $icons = 'uploads/' . $_FILES['icon']['name'];
    move_uploaded_file($_FILES['icon']['tmp_name'], '../' . $icons);
    /* Фото фона */
    $bacground = 'uploads/' . $_FILES['bacground']['name'];
    move_uploaded_file($_FILES['bacground']['tmp_name'], '../' . $bacground);
    /* Логотип */
    $logo = 'uploads/' . $_FILES['logo']['name'];
    move_uploaded_file($_FILES['logo']['tmp_name'], '../' . $logo);
    /* Фото рейтинга */
    $rateimg = 'uploads/' . $_FILES['rateimg']['name'];
    move_uploaded_file($_FILES['rateimg']['tmp_name'], '../' . $rateimg);
    /* Pegi Img 1 */
    $pegi1 = 'uploads/' . $_FILES['pegi1']['name'];
    move_uploaded_file($_FILES['pegi1']['tmp_name'], '../' . $pegi1);
    /* Pegi Img 2 */
    $pegi2 = 'uploads/' . $_FILES['pegi2']['name'];
    move_uploaded_file($_FILES['pegi2']['tmp_name'], '../' . $pegi2);
    mysqli_query($conn, "INSERT INTO `game`(`name`, `price`, `img`, `mainimg`, `imgBag`, `description`, `requirements`, `rate`, `rateImg`, `img2`, `img3`) VALUES ('$name','$price','$logo','$icons','$bacground','$description','$requirements','$rate','$rateimg','$pegi1','$pegi2')");

Понравилась статья? Поделить с друзьями:
  • Загрузка файла завершилась с ошибкой dle
  • Загрузка валюты в 1с ошибка
  • Загрузка файла больше 4мб ошибка не работает 1с битрикс
  • Загрузка в облако системная ошибка
  • Загрузка страницы выполнено с ошибками