Я могу загружать файлы на удаленный сервер, а не локально на XAMPP

Я использую этот скрипт для загрузки файла изображения. Это должно позволить загружать файлы JPEG, JPG и PNG.

Все работает на удаленном сервере, но я не могу загрузить его локально, на сервер XAMPP. Я перепробовал все советы, упомянутые в этой теме Почему $ _FILES будет пустым при загрузке файлов в PHP? но никто не работал.

Спасибо за помощь

Форма:

<form class="form-horizontal" action="potwierdz.php" method="POST" enctype="multipart/form-data">
<fieldset>

<!-- Form Name -->
<legend>Dodawanie produktu</legend>

<!-- Text input-->
<div class="form-group">
<label class="col-md-4 control-label" for="produkt_nazwa">Nazwa</label>
<div class="col-md-4">
<input id="produkt_nazwa" name="produkt_nazwa" class="form-control input-md" required="" type="text">
<span class="help-block">Podaj nazwę produktu</span>
</div>
</div>

<!-- Text input-->
<div class="form-group">
<label class="col-md-4 control-label" for="producent_nazwa">Nazwa producenta</label>
<div class="col-md-4">
<input id="producent_nazwa" name="producent_nazwa" class="form-control input-md" required="" type="text">
<span class="help-block">Podaj nazwę producenta produktu</span>
</div>
</div>

<!-- Textarea -->
<div class="form-group">
<label class="col-md-4 control-label" for="producent_adres">Adres producenta</label>
<div class="col-md-4">
<textarea class="form-control" id="producent_adres" name="producent_adres" required=""></textarea>
</div>
</div>

<!-- Select Basic -->
<div class="form-group">
<label class="col-md-4 control-label" for="produkt_kategoria_nazwa">Kategoria</label>
<div class="col-md-4">
<select id="produkt_kategoria_nazwa" name="produkt_kategoria_nazwa" class="form-control">
<option> </option>
</select>
</div>
</div>

<!-- File Button -->
<div class="form-group">
<label class="col-md-4 control-label" for="obraz">Zdjęcie</label>
<div class="col-md-4">
<input id="obraz" name="obraz" class="input-file" type="file">
</div>
</div>

<!-- Button -->
<div class="form-group">
<label class="col-md-4 control-label" for="wyslij"></label>
<div class="col-md-4">
<button id="wyslij" name="wyslij" class="btn btn-primary">Dodaj</button>
</div>
</div>

</fieldset>
</form>

вот скрипт:

<?php

$errors= array();
$file_name = $_FILES['obraz']['name'];
$file_size =$_FILES['obraz']['size'];
$file_tmp =$_FILES['obraz']['tmp_name'];
$file_type=$_FILES['obraz']['type'];
$file_ext=strtolower(end(explode('.',$_FILES['obraz']['name'])));

$expensions= array("jpeg","jpg","png");

if(in_array($file_ext,$expensions)=== false){
$errors[]="extension not allowed, please choose a JPEG or PNG file.";
}

if(empty($errors)==true){
move_uploaded_file($file_tmp,"obrazki/".$file_name);
echo "Success";
}else{
print_r($errors);
}

?>

Это возвращает менярасширение не допускается, выберите файл JPEG или PNG.«

Это также печать
Примечание: неопределенный индекс: образ
всякий раз, когда я использую $_FILES['obraz']['...'] переменная.

0

Решение

Я бы сделал проверку, когда вы назначаете $file_name, $file_typeи т. д. переменные.

Пример валидации:

if (!isset($_FILES['obraz']['name'])) {
throw new \Exception('Missing file name)";
}

Кроме того, я бы использовал array_pop() вместо end, Это просто дает вам последний элемент в массиве после того, как вы взорвете его.

Это, и я бы обрезать любой потенциальный пробел с вашего $file_ext переменная, так как пробел может быть потенциальной проблемой (и может даже вызывать вашу проблему):

$file_pieces = explode('.',$_FILES['obraz']['name']);
$file_ext = trim(array_pop($file_pieces));

Наконец, во время вашей проверки я бы создал более описательную ошибку; тот, который повторяет $file_ext:

if (in_array($file_ext,$expensions) === false){
$errors[] = "extension '$file_ext' not allowed, please choose a JPEG or PNG file.";
}

Если вы еще возникли проблемы, сделать var_dump($_FILES) или же print_r($_FILES) чтобы убедиться, что вы правильно указали имя файла. Если это не сработает, убедитесь, что ваша среда настроена и работает правильно.

0

Другие решения

Эта строка генерирует ошибку в PHP5.6 & PHP5.5 & PHP 5.4 и уведомление в PHP7.0.5

Строгие стандарты: только переменные должны передаваться по ссылке

$file_ext=strtolower(end(explode('.',$_FILES['obraz']['name'])));

Замени это

$t = explode('.',$_FILES['obraz']['name']);
$file_ext = strtolower($t[1]);

Или, если вы используете PHP7, то вы можете использовать

$file_ext = strtolower(explode('.',$_FILES['obraz']['name'])[1]);
0

По вопросам рекламы [email protected]