Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 06.01.2019
Сообщений: 19

Скрипт загрузки файла на хостинг

17.02.2020, 20:07. Показов 2976. Ответов 24

Студворк — интернет-сервис помощи студентам
Добрый день. В интернете нашел скрипт загрузки файла с сайта в папку хостинга. Если отдельно ее запускать /public_html/upload.php то все работает - сначала показывает форму где выбираем файл, жмем на кнопку Загрузить - выходит отдельная страница о статусе загрузки..все норм. Но мне нужно этот test.php вывести в содержимое страницы сайта content.php. В index.php подключаю content.php и sidebar.php через include, настраиваю в sidebar.php ссылку

HTML5
1
<div id="upload"><a href="upload.php" target="_blank" onclick="ajax();return false">Форма загрузки</a></div>
, в index.php дописываю обработку нажатия на пункт меню:

JavaScript
1
2
3
4
5
6
7
8
9
$( "#upload" ).click(function(e) {
      e.preventDefault();
      $.ajax({
            url: 'upload.php',
            success: function(data) {
                $('#content').html(data);
            }
        });
    });
- при клике страница upload.php грузится, выбираю файл, жму на кнопку - происходит обновление страницы и все, указанная папка на хостинге пустая.
Содержимое upload.php:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<? 
$path = realpath(getcwd() . '/../files/input/');
if(!file_exists($path)) 
die("<b>Пожалуйста, создайте папку <font color=red>".$path."</font> и <a href=?>повторите попытку загрузить файл</a>.</b>"); 
if(empty($_FILES['UserFile']['tmp_name'])) 
echo"<form method=post enctype=multipart/form-data> 
Выберите файл: <input type=file name=UserFile> 
<input type=submit value=Отправить> 
</form>"; 
elseif(!is_uploaded_file($_FILES['UserFile']['tmp_name'])) 
die("<b><font color=red>Файл не был загружен! Попробуйте <a href=?>повторить попытку</a>!</font></b>"); 
else{ 
if(@!copy($_FILES['UserFile']['tmp_name'],$path.chr(47).$_FILES['UserFile']['name'])) 
die("<b><font color=red>Файл не был загружен! Попробуйте <a href=?>повторить попытку</a>!</font></b>"); 
else
echo "<center><b>Файл \"<font color=red>".$_FILES['UserFile']['name']."\"</font> успешно загружён на сервер!</font></b></center>"."<hr>". 
"Тип файла: <b>".$_FILES['UserFile']['type']."</b>". 
"Размер файла: <b>".round($_FILES['UserFile']['size']/1024,2)." кб.</b>". 
"<hr><center><a href=?>Загрузить ещё один файл!</a></center>"; 
} 
?>
HTML5
1
2
<div id="content">
</div>
Подскажите почему так происходит? Что в коде нужно поправить для адекватной его работы? Что нужно добавить чтобы статус сообщения об успешной/неуспешной загрузки выходили в этом же content.php без перезагрузки страницы? - какой ajax код прописать для этого случая? Заранее спасибо
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.02.2020, 20:07
Ответы с готовыми решениями:

Форма и скрипт загрузки файла на хостинг
Здравствуйте! Заходя на страницу с формой, сразу происходит исполнение скрипта загрузки файла на хостинг. А как сделать что бы загрузка...

Скрипт загрузки файла
Ребят, у меня такая ситуация: нужно при нажатии на ссылку открыть-загрузить данные с сервера (я создал сайт и разместил на нем файл) ...

Напишите пожалуйста скрипт для загрузки файла
Написать форму для загрузки файла размером до 10Мб на сервер, в свою рабочую папку. &lt;?php if($_FILES &gt; 0) { ...

24
 Аватар для vinikon
340 / 160 / 89
Регистрация: 16.01.2020
Сообщений: 771
17.02.2020, 20:44
ошибки в логе сервера и консоли js какие-то выводятся? если да, то какие.
Цитата Сообщение от zhdanovsv Посмотреть сообщение
указанная папка на хостинге пустая
что за папка? что в ней должно быть? какие права доступа к ней?
Цитата Сообщение от zhdanovsv Посмотреть сообщение
Что нужно добавить чтобы статус сообщения об успешной/неуспешной загрузки выходили в этом же content.php без перезагрузки страницы
нужен более подробный код content.php
0
Невнимательный
 Аватар для ft4l
3108 / 1285 / 358
Регистрация: 08.02.2013
Сообщений: 7,546
Записей в блоге: 2
17.02.2020, 21:08
Цитата Сообщение от zhdanovsv Посмотреть сообщение
<form method=post enctype=multipart/form-data>
по умолчанию в форме action="" данные отправляются на текущий адрес

а текущий у Вас index.php , насколько понял... не upload.php

Цитата Сообщение от zhdanovsv Посмотреть сообщение
if(!file_exists($path))
почему не is_dir() ?
...

И да пробуйте убрать @ там где @!copy()
Может chmod не позволяет записывать в каталог

Добавлено через 6 минут
и наверное $path.chr(47).basename($_FILES['UserFile']['name'])
на всякий случай, если upload.php общедоступен
и возможено запрет заливки файлов.php и запрет перезаписи существующих

Добавлено через 4 минуты
есть менее затратная , вместо copy(), специальная функция
PHP
1
bool move_uploaded_file ( string $filename , string $destination )
Но и она тоже перезаписывает существующие файлы.
0
0 / 0 / 0
Регистрация: 06.01.2019
Сообщений: 19
17.02.2020, 22:19  [ТС]
Папка $path = realpath(getcwd() . '/../files/input/') - папка на хостинге для загрузки файлов с сайта.
Права на папку были 700, добавил для всех остальных, но ситуация не изменилась. Работает когда просто запускаешь файл upload.php из браузера. В консоли браузера появляется сообщение после загрузки "include.preload.js:442 [Deprecation] Element.createShadowRoot is deprecated and will be removed in M80, around February 2020. Please use Element.attachShadow instead. See https://www.chromestatus.com/f... 2028072960 and https://developers.google.com/... to-upgrade for more details." , но как я понял, это тоже не существенно, т.к. в итоге файл загружается, а сообщение говорит про скорую замену старой ф-ии в фев 2020.
Так же в консоли при нажатии на пункт меню возникала ошибка Uncaught ReferenceError: ajax is not defined at HTMLAnchorElement.onclick (), бегло прочитав что к чему поправил предыдущий код, перестала выходить:
HTML5
1
<div id="upload"><a href="upload.php" target="_blank" onclick="[B]$.[/B]ajax();return false">Форма загрузки</a></div>
Основной код content.php:
HTML5
1
2
3
<div id="content">
    <h2>Основной контент страницы</h2>    
</div><!-- #content-->
Код index.php:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <title>Хочу веб-сайт</title>
    <meta name="title" content="Хочу веб-сайт" />
    <meta name="keywords" content="" />
    <meta name="description" content="" />
    <link rel="stylesheet" href="stylesite.css" type="text/css" media="screen, projection" />
</head>
<body>
<div id="main">
    <!-- #header-->
     <?php include ("header.php");?>
    
     <?php include ("sideright.php"); ?>
     
     <?php include ("content.php"); ?>
      
     <?php include ("footer.php"); ?>
             
</div>
 
  <script src="../assets/jquery/jquery-3.2.1.min.js"></script>
  <script src="../assets/bootstrap/js/bootstrap.min.js"></script>
 
  <script>
    
    window.onload = function () {   
    document.getElementById("home").onclick = function(e){
      e.preventDefault();
      // alert( "Handler for .click() called." );
      $.ajax({
            url: 'content.php',
            success: function(data) {
                $('#content').html(data);
            }
        });
    };
    
    document.getElementById("upload").onclick = function(e){
      e.preventDefault();
      $.ajax({
            url: "upload.php",
            success: function(data) {
                $('#content').html(data);
            }
        });
    };
    
    document.getElementById("learning").onclick = function(e){
      e.preventDefault();
      $.ajax({
            url: 'learning.php',
            success: function(data) {
                $('#content').html(data);
            }
        });
    });
    
    };
  
  </script>
</body>
</html>
Код sideright.php:
HTML5
1
2
3
4
5
6
7
8
<div id="sideright">
    <p align="center" class="title">Навигация</p>
    <div class="coolmenu">
        <div id="home"><a href="content.php" target="_blank" onclick="$.ajax();return false">Главная</a></div>
        <div id="learning"><a href="learning.php" target="_blank" onclick="$.ajax();return false">Обучение</a></div>
        <div id="upload"><a href="upload.php" target="_blank" onclick="$.ajax();return false">Форма загрузки</a></div>
    </div>
 </div><!--#sideRight -->
После внесения правки в код upload.php - добавил action=upload.php - Файлы стали загружаться, но страница upload.php с результатом загрузки раскрывается на всю страницу (см. вложение). Как сделать чтобы статус загрузки был в content.php? Какой ajax добавить в этом случае?
Миниатюры
Скрипт загрузки файла на хостинг  
0
 Аватар для vinikon
340 / 160 / 89
Регистрация: 16.01.2020
Сообщений: 771
17.02.2020, 22:46
Цитата Сообщение от zhdanovsv Посмотреть сообщение
$.ajax();
неправильно. попробуйте как-то так
HTML5
1
onclick="upload();return false;"
и где-то в js коде функция
JavaScript
1
2
3
4
5
function upload() {
$.ajax({
....
});
}
Добавлено через 1 минуту
ой, цитат отформатировалась, имел в виду этот фрагмент:
onclick="[B ] $.[/ B]ajax();return false"

Добавлено через 8 минут
зачем кстати в ссылке атрибут _target, если она не загружается (return false)?

Добавлено через 9 минут
<div id="upload">....
можно переписать проще
HTML5
1
<div id="upload"><a href="upload.php">Форма загрузки</a></div>
а в index.php строки 41-49 переписать так
JavaScript
1
2
3
4
5
6
7
8
9
$('#upload a').on('click', function() {
    $.ajax({
            url: "upload.php",
            success: function(data) {
                $('#content').html(data);
            }
        });
    return false;
}):
0
0 / 0 / 0
Регистрация: 06.01.2019
Сообщений: 19
17.02.2020, 22:47  [ТС]
Убрал target, если вернуть первоначальное значение как у меня было в самом начало onclick="ajax();return false" в консоли появляется ошибка Uncaught ReferenceError: ajax is not defined at HTMLAnchorElement.onclick ((index):29), если установить в onclick="$.ajax();return false" - исчезает.
Проблема оформления ответа после удачной загрузки не решает - раскрывается на весь экран, нужно чтобы помещалось только в content.php (зеленое окно)
Миниатюры
Скрипт загрузки файла на хостинг   Скрипт загрузки файла на хостинг  
0
 Аватар для vinikon
340 / 160 / 89
Регистрация: 16.01.2020
Сообщений: 771
17.02.2020, 22:52
и остальные обработчики переписать так же, ведь jquery подключен

Добавлено через 3 минуты
консоль js посмотрите, удалите onclick, поправьте строки js, увы.. вынужден вас покинуть до завтра
0
0 / 0 / 0
Регистрация: 06.01.2019
Сообщений: 19
18.02.2020, 08:30  [ТС]
Переписал sideright.php:
HTML5
1
2
3
4
5
6
7
8
<div id="sideright">
    <p align="center" class="title">Навигация</p>
    <div class="coolmenu">
        <div id="home"><a href="content.php">Главная</a></div>
        <div id="learning"><a href="learning.php">Обучение</a></div>
        <div id="upload"><a href="upload.html">Форма загрузки</a></div>
    </div>
 </div>
в index.php поправил код js реакции на нажатия пункты меню, как советовали. Вместо
HTML5
1
2
3
4
5
6
7
8
9
10
document.getElementById("upload").onclick = function(e){
          e.preventDefault();
          $.ajax({
                url: "upload.html",
                success: function(data) {
                    $('#content').html(data);
                }
            });
            return false;
        };
установил
HTML5
1
2
3
4
5
6
7
8
9
$('#upload a').on('click', function() {
            $.ajax({
                    url: "upload.html",
                    success: function(data) {
                        $('#content').html(data);
                    }
                });
            return false;
        });
Сам файл upload.php с первоначальным скриптом разделил на html файл и его обработку php (upload.html, upload.php):
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Загрузка файлов</title>
</head>
<body>
  <form id="formupload" name="upload"  method="POST" ENCTYPE="multipart/form-data">
   Выберите файл для загрузки: <input type="file" name="userfile">
   <input type="submit" name="upload" value="upload">
  </form>
  </body>
</html>
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
 $imageinfo = getimagesize($_FILES['userfile']['tmp_name']);
 if($imageinfo['mime'] != 'image/gif' && $imageinfo['mime'] != 'image/jpeg') {
  echo "Sorry, we only accept GIF and JPEG images\n";
  exit;
 }
 $uploaddir = '../files/input/'; // Relative path under webroot
 $uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
 if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
   $text = "Файл успешно загружен!.\n";
 } else {
   $text = "Ошибка загрузки файла!.\n";
 } 
?>
Теперь осталось за малым - написать скрипт ajax который при нажатии на кн. Загрузить не будет выводить новую страницу. а будет выводить сообщение "Файл успешно загружен!" в #content.
Насколько я понимаю, скрипт должен быть что-то вроде такого:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
$("#formupload").submit(function (e) { 
    e.preventDefault();
    var form_data = $(this).serialize();
    $.ajax({
        type: "POST", // Метод отправки
        url: "index.php", // Путь до php файла отправителя
        data: form_data,
        success: function () {
        alert("Ваше сообщение отправлено!");
        }
    });
});
Я его прописываю либо в основном файле index.php или в файле upload.php - не реагирует на нажатие формы сообщением Ваше сообщение отправлено! - происходит рестарт страницы, файл не загружается. Где косяк?
Вложения
Тип файла: zip files.zip (6.2 Кб, 3 просмотров)
0
 Аватар для vinikon
340 / 160 / 89
Регистрация: 16.01.2020
Сообщений: 771
18.02.2020, 09:44
сейчас, только открыл.
Цитата Сообщение от zhdanovsv Посмотреть сообщение
<script src="../assets/jquery/jquery-3.2.1.min.js"></script>
  <script src="../assets/bootstrap/js/bootstrap.min.js"></script>
перенесите в заголовок страницы (между тегами <head></head>)
сейчас решим вопрос.
0
0 / 0 / 0
Регистрация: 06.01.2019
Сообщений: 19
18.02.2020, 09:53  [ТС]
Добавил в файл upload.php скрипт обработки:

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Загрузка файлов</title>
</head>
<body>
  <form id="formupload" target="_self" action="upload.php" name="upload"  method="POST" ENCTYPE="multipart/form-data">
   Выберите файл для загрузки: <input type="file" name="userfile">
   <input type="submit" name="upload" value="upload">
  </form>
      
      
<script>
 
$(document).ready(function() { 
            // bind 'myForm' and provide a simple callback function 
            $('#formupload').ajaxForm(function() { 
                
                alert("Файл успешно загружен"); 
            }); 
        });
</script>     
      
</body>
</html>
таким образом при нажатии кнопки upload на форме выходит всплывающее окно с сообщением "Файл успешно загружен", страница не перегружается, файл загружается на хостинг.
Как доделать чтобы сообщение было в самом файле content.php ?
Миниатюры
Скрипт загрузки файла на хостинг   Скрипт загрузки файла на хостинг  
0
 Аватар для vinikon
340 / 160 / 89
Регистрация: 16.01.2020
Сообщений: 771
18.02.2020, 10:52
вы меня немного не поняли. сейчас напишу как надо. так будет проще.

Добавлено через 36 минут
пока измените ваш index.php так
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>Хочу веб-сайт</title>
    <meta name="title" content="Хочу веб-сайт" />
    <meta name="keywords" content="" />
    <meta name="description" content="" />
    <link rel="stylesheet" href="stylesite.css" type="text/css" media="screen, projection" />    
    <script src="./js/jquery-3.4.1.min.js"></script>
    <script src="../assets/bootstrap/js/bootstrap.min.js"></script>
    <script>
    $('document').ready(function() {
        $('#upload a').on('click', function() {
            $.ajax({
                url: "upload.php",
                success: function(data) {
                    $('#content').html(data);
                }
            });
            return false;
        });
        $('#learning a').on('click', function() {
            $.ajax({
                url: "learning.php",
                success: function(data) {
                    $('#content').html(data);
                }
            });
            return false;
        });
        $('#home a').on('click', function() {
            $.ajax({
                url: "content.php",
                success: function(data) {
                    $('#content').html(data);
                }
            });
            return false;
        });    
    });
    </script>
</head>
<body>
<?php include ("header.php");?>
<?php include ("sideright.php"); ?>
<?php include ("content.php"); ?>
<?php include ("footer.php"); ?>
</body>
</html>
Добавлено через 16 минут
так вот где ошибка. надо было
PHP
1
include ("footer.html"); ?>
только после этого на странице появляется форма с id formupload. теперь надо этот код
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$("#formupload").submit(function (e) { 
            e.preventDefault();         
            var form_data = $(this).serialize();
            $.ajax({
                
                type: "POST", 
                url: "upload.php",
                data: form_data,
                success: function () {
                    // Код в этом блоке выполняется при успешной отправке сообщения
                alert("Ваше сообщение отправлено!");
                }
            });
        });
вставить после строчки 40 (между 40 и 41) моего скрипта.

Добавлено через 3 минуты
ой в строчке 10 jquery надо подключать с вашими путями
HTML5
1
<script src="../assets/jquery/jquery-3.2.1.min.js"></script>
0
0 / 0 / 0
Регистрация: 06.01.2019
Сообщений: 19
18.02.2020, 11:06  [ТС]
Нет, не прокатывает. Сделал как советуете - изменил footer.php на footer.html, хотя зачем так и не понял, ну да ладно.
Добавил ваш скрипт. но он не обрабатывается - при нажатии на upload происходит обработка upload.php и на новой странице выходит сообщение об успешной загрузке файла...

Как мне кажется, нужно в upload.php переменную $text с нужным сообщением заставить выводить в основном окне через ajax

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
 $text = "Выберите файлы формата JPEG или GIF!\n";
 $imageinfo = getimagesize($_FILES['userfile']['tmp_name']);
 if($imageinfo['mime'] != 'image/gif' && $imageinfo['mime'] != 'image/jpeg') {
  echo $text;
  exit;
 }
 
 $uploaddir = '../files/input/'; // Relative path under webroot
 $uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
 
 if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
   $text = "Файл успешно загружен!.\n";
   
 } else {
   $text = "Ошибка загрузки файла!.\n";
 }
 echo $text;
?>
Миниатюры
Скрипт загрузки файла на хостинг   Скрипт загрузки файла на хостинг   Скрипт загрузки файла на хостинг  

Вложения
Тип файла: zip files.zip (5.6 Кб, 0 просмотров)
0
 Аватар для vinikon
340 / 160 / 89
Регистрация: 16.01.2020
Сообщений: 771
18.02.2020, 11:09
нет. это я запутался в файлах. файла footer.html нет по ходу дела. есть upload.html. и форма с id = formupload расположена в upload.html, поэтому скрипту $("#formupload").submit(function (e) { ..... в index.php делать нечего.
0
0 / 0 / 0
Регистрация: 06.01.2019
Сообщений: 19
18.02.2020, 12:32  [ТС]
Просьба помочь, нужен рабочий вариант. Готов оплатить

Добавлено через 3 минуты
Дополню: нужна проверка при загрузке файла на формат: doc, pdf.
0
 Аватар для vinikon
340 / 160 / 89
Регистрация: 16.01.2020
Сообщений: 771
18.02.2020, 13:40
все, вот такой вариант:
index.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<?php
header('Content-Type: text/html; charset=utf-8');
error_reporting(E_ALL);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
?><!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>Хочу веб-сайт</title>
    <meta name="title" content="Хочу веб-сайт" />
    <meta name="keywords" content="" />
    <meta name="description" content="" />
    <link rel="stylesheet" href="stylesite.css" type="text/css" media="screen, projection" />    
    <script src="../assets/jquery/jquery-3.2.1.min.js"></script>
    <script src="../assets/bootstrap/js/bootstrap.min.js"></script>
    <script>
    $('document').ready(function() {
        $('#upload a').on('click', function() {
            $.ajax({
                url: "upload.html",
                success: function(data) {
                    $('#content').html(data);
                }
            });
            return false;
        });
        $('#learning a').on('click', function() {
            $.ajax({
                url: "learning.php",
                success: function(data) {
                    $('#content').html(data);
                }
            });
            return false;
        });
        $('#home a').on('click', function() {
            $.ajax({
                url: "content.php",
                success: function(data) {
                    $('#content').html(data);
                }
            });
            return false;
        });
    });
    </script>
</head>
<body>
<?php include ("header.php");?>
<?php include ("sideright.php"); ?>
<?php include ("content.php"); ?>
<?php include ("footer.php"); ?>
</body>
</html>
upload.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?php
 $info = '';
 if (!isset($_FILES['userfile'])) {
     exit;
 }
 $file_errors = [
     1 => 'Размер файла больше допустимого',
     2 => 'Размер загружаемого файла превысил значение MAX_FILE_SIZE, указанное в HTML-форме',
     3 => 'Загружаемый файл был получен только частично',
     4 => 'Файл не был загружен',
     6 => 'Отсутствует временная папка',
     7 => 'Не удалось записать файл на диск',
     8 => 'PHP-расширение остановило загрузку файла',
 ];
 $ext_allowed = ['bmp', 'gif', 'png', 'jpg', 'jpeg'];
 if (isset($file_errors[$_FILES['userfile']['error']])) {
     $info = $file_errors[$_FILES['userfile']['error']];
 }
 if ($info == '') {
    $fi = finfo_open(FILEINFO_MIME_TYPE);
    $mime = finfo_file($fi, $_FILES['userfile']['tmp_name']);
    if (strpos($mime, 'image') === false) {
        $info = 'Недопустимый тип изображения';
    } else {
        $part = explode('.', $_FILES['userfile']['name']);
        $ext = strtolower(array_pop($part));
        if (!in_array($ext, $ext_allowed)) {
            $info = 'Недопустимое расширение файла '.$ext;
        }
    }
}
if ($info == '') {
    $filename = 'file_'.uniqid().'.'.$ext;
    if (!move_uploaded_file($_FILES['userfile']['tmp_name'], 
        './upload/'.$filename)) {
        $info = 'При загрузке изображения произошла ошибка на сервере!';
    } else {
        $info = 'Файл с названием '.
            htmlentities($_FILES['userfile']['name'], ENT_QUOTES, 'utf-8').' '.
            'успешно загружен на сервер с новым названием '.$filename;
    }
}
echo $info;
upload.html
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<div id="upload_info"></div>
<form id="formupload" action="upload.php"  method="POST" ENCTYPE="multipart/form-data">
   Выберите файл для загрузки: <input type="file" name="userfile" id="userfile" accept="image/*">
   <input type="submit" name="upload" id="upload" value="upload">
</form>
<script>
$("#formupload").on('submit', function(e){
e.preventDefault();
    var form_data = new FormData();
    form_data.append('userfile', $('#userfile').prop("files")[0]);
    alert(form_data);
    $.ajax({
      url: 'upload.php',
      type: 'post',
      dataType : 'text',
      data: form_data,
      cache: false,
      contentType: false,
      processData: false,
      success: function(data){
        $('#upload_info').html(data);
      },
      error: function(data){
        $('#upload_info').html('ОШИБКА: '  + data);
      }
    });
    return false;
  });
</script>
0
0 / 0 / 0
Регистрация: 06.01.2019
Сообщений: 19
18.02.2020, 14:07  [ТС]
Применил указанные изменения, при указании файла выходит сообщение alert img1, но в итоге да, после сообщение грузится туда куда нужно (img2)
Миниатюры
Скрипт загрузки файла на хостинг   Скрипт загрузки файла на хостинг  
0
 Аватар для vinikon
340 / 160 / 89
Регистрация: 16.01.2020
Сообщений: 771
18.02.2020, 14:10
Цитата Сообщение от zhdanovsv Посмотреть сообщение
выходит сообщение alert img1
уберите строчку 11 в upload.html

Добавлено через 45 секунд
сейчас переделаю загрузчик для doc и pdf
0
0 / 0 / 0
Регистрация: 06.01.2019
Сообщений: 19
18.02.2020, 14:11  [ТС]
Супер! Наконец-то как надо
0
 Аватар для vinikon
340 / 160 / 89
Регистрация: 16.01.2020
Сообщений: 771
18.02.2020, 14:22
вот вариант для doc, pdf. у doc оказывается mime может быть и application и text. проверил - из всех имеющихся у меня doc файлов только такие варианты. вторая часть mime не существенна. вот upload.php для них. проверьте сами. и у себя еще потестирую разные doc и pdf файлы
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?php
 $info = '';
 if (!isset($_FILES['userfile'])) {
     exit;
 }
 $file_errors = [
     1 => 'Размер файла больше допустимого',
     2 => 'Размер загружаемого файла превысил значение MAX_FILE_SIZE, указанное в HTML-форме',
     3 => 'Загружаемый файл был получен только частично',
     4 => 'Файл не был загружен',
     6 => 'Отсутствует временная папка',
     7 => 'Не удалось записать файл на диск',
     8 => 'PHP-расширение остановило загрузку файла',
 ];
 $ext_allowed = ['doc', 'pdf'];
 if (isset($file_errors[$_FILES['userfile']['error']])) {
     $info = $file_errors[$_FILES['userfile']['error']];
 }
if ($info == '') {
    $fi = finfo_open(FILEINFO_MIME_TYPE);
    $mime = explode('/', finfo_file($fi, $_FILES['userfile']['tmp_name']));
    if (!in_array($mime[0], ['text', 'application'])) {
        $info = 'Недопустимый тип файла';
    } else {
        $part = explode('.', $_FILES['userfile']['name']);
        $ext = strtolower(array_pop($part));
        if (!in_array($ext, $ext_allowed)) {
            $info = 'Недопустимое расширение файла '.$ext;
        }
    }
}
if ($info == '') {
    $filename = 'file_'.uniqid().'.'.$ext;
    if (!move_uploaded_file($_FILES['userfile']['tmp_name'], 
        './upload/'.$filename)) {
        $info = 'При загрузке изображения произошла ошибка на сервере!';
    } else {
        $info = 'Файл с названием '.
            htmlentities($_FILES['userfile']['name'], ENT_QUOTES, 'utf-8').' '.
            'успешно загружен на сервер с новым названием '.$filename;
    }
}
echo $info;
0
0 / 0 / 0
Регистрация: 06.01.2019
Сообщений: 19
18.02.2020, 14:31  [ТС]
А еще вопрос - при загрузке имя файла меняется, почему?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.02.2020, 14:31
Помогаю со студенческими работами здесь

Где можно скачать простейший скрипт чата в одном файле на PHP?
Где можно скачать простейший скрипт чата в одном файле на PHP?

Не работает php-скрипт для выгрузки данных в XML-файл. Просьба глянуть что не так
Не работает php-скрипт для выгрузки данных в XML-файл. Просьба глянуть что не так. Вот скрипт: &lt;?php require_once...

Загрузка больших файлов, по кусочкам
Приветствую. Необходимо грузить большие файлы, размером по 100-200 мб. Как вариант, грузить не сразу весь файл, а по чуть-чуть,...

Загрузка файла php
Здравствуйте! Мне нужно реализовать автозакачку файла на сервер. Как это сделать? Кто может помочь? Просто каждый день я обновляю...

Не удается загрузка нескольких файлов на сервер. Грешу на настройки php
Прошу помочь разобраться. Создал форму загрузки файлов (фотографий). В обработчике создал функцию загрузки этий файлов. Но! На...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru