Помогите разобраться, вопрос/проблема вот в чём:
в папке webroot/uploads/ не появляется файл который загружается на сервер, хотя путь прописан, сама функция перемещения никаких ошибок не выдает...
странность еще в том что в папке webroot появляется файл $full_path, с набором просто цифр...
сам путь в базе сохраняется всё корректно (в виде: webroot/uploads/1496868491.png)
решил глянуть var_dump($_FILES['img_file']);
array(5) {
["name"]=>
string(6) "t1.png"
["type"]=>
string(9) "image/png"
["tmp_name"]=>
string(50) "C:\openserver\OpenServer\userdata\temp\php5875.tmp"
["error"]=>
int(0)
["size"]=>
int(2387)
}
сам код.
path = 'webroot/uploads/'; // директория для загрузки
$ext = array_pop(explode('.',$_FILES['img_file']['name'])); // расширение
$new_name = time().'.'.$ext; // новое имя с расширением
$full_path = $path.$new_name; // полный путь с новым именем и расширением
echo "<pre>";
echo var_dump($_FILES['img_file']);
echo "</pre>";
if($_FILES['img_file']['error'] == 0){
if(move_uploaded_file(($_FILES['img_file']['tmp_name']), '$full_path')){,,,,}
В поисках решения наткнулся на совет проверить папку на запись
if (!is_writable($path)) {
die("Запись в каталог запрещена");
} else {if(move_uploaded_file(....)){...}
Так вот проверка выдала что $path, защищен от записи, кто знает как дать разрешение на запись? (вопрос в том что можно сделать это через cmd, или же с помощью средств php)
добавил по совету (B. Bohdan) к переменной пути следующее $_SERVER["DOCUMENT_ROOT"].
получилось так
$path = $_SERVER['DOCUMENT_ROOT']."/webroot/uploads/";
!update! после таких манипуляций при вызове адреса картинки из базы, сама картинка не подтягивалась из дериктории т.к путь был следующего вида
C:/openserver/OpenServer/domains/localhost/webroot/uploads/1496908169.png
соответственно это не удовлетворяло конечную цель.
после редактирования получил следующий код.
$path = "/webroot/uploads/"; // директория для загрузки
$ext = array_pop(explode('.',$_FILES['img_file']['name'])); // расширение
$new_name = time().'.'.$ext; // новое имя с расширением
$full_path = $path.$new_name; // полный путь с новым именем и расширением
/*echo "<pre>";
echo var_dump($path);
echo "</pre>";*/
if($_FILES['img_file']['error'] == 0){
if(move_uploaded_file($_FILES['img_file']['tmp_name'], $_SERVER['DOCUMENT_ROOT'].$full_path)){
// Если файл успешно загружен, то вносим в БД
// Можно сохранить $full_path (полный путь) или просто имя файла - $new_name
в моём случае всё заработало, и теперь изображения попадают в папку (C:/openserver/OpenServer/domains/localhost/webroot/uploads/1496908169.png) , а путь к ним записывается в базу в таком виде (/webroot/uploads/1496909914.png) =)
Работа этой суперглобальной переменной зависит от правильности настроек сервера. Ее использование рекомендовано стандартом.
Зачем '$full_path' в последней строке оборачивать в одинарные кавычки? Я делаю вот так:
//куда загружать?
$dir = $_SERVER["DOCUMENT_ROOT"] . "/webroot/uploads";
//имя файла (с расширением)
$name = basename($_FILES["img_file"]["name"]);
//расширение файла
$ext = array_pop(explode(".", $name));
//новое имя (с расширением)
$new_name = time() . "." . $ext;
//постоянное место хранения файла
$file_dir = $dir . DIRECTORY_SEPARATOR . $new_name;
//временное место хранения файла
$tmp_name = $_FILES["img_file"]["tmp_name"];
//переместить файл в постоянное место хранения
if (is_uploaded_file($tmp_name) && move_uploaded_file($tmp_name, $file_dir)) {
echo "Файл успешно загружен по такому адресу: " . $file_dir;
} else {
echo "Не удалось загрузить файл по такому адресу: " . $file_dir;
}
А еще лучше — обратитесь к документации, там все подробно описано: php.net
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости