Задать вопрос

Каким образом можно задать права на загружаемый средствами php файл?

Используется бесплатный хостинг, доступ по ftp. Каким образом можно задать права на загружаемый средствами php файл? Файл загружается в каталог img, и парава у него 600, следовательно на сайте не отображается изображение.
Вот код загрузки изображения:

<?php
header("Content-Type: text/html; charset=windows-1251");
require_once("check.php");

mysql_connect("database","studio38","a1Oim1Yx");
mysql_query('SET NAMES utf8;');
mysql_select_db("test");
if (!$db) echo mysql_error();
if (check() == "authorized"){

// Если поле выбора картинки не пустое - закачиваем её на сервер
$foto_dir = "img/"; // Директория для фотографий товаров
$foto_name = $fotos_dir.time()."_".basename($_FILES['myfile']['name']); // Полное имя файла вместе с путем
$foto_light_name = time()."_".basename($_FILES['myfile']['name']); // Имя файла исключая путь
$foto_tag = "%5C"; // Готовый тэг для вставки картинки на страницу
// Текст ошибок
$error_by_mysql = "Ошибка при добавлении данных в базу";
$error_by_file = "Невозможно загрузить файл в директорию. Возможно её не существует";

// Начало
if(isset($_FILES["myfile"]))
{
$myfile = $_FILES["myfile"]["tmp_name"];
$myfile_name = $_FILES["myfile"]["name"];
$myfile_size = $_FILES["myfile"]["size"];
$myfile_type = $_FILES["myfile"]["type"];
$error_flag = $_FILES["myfile"]["error"];

// Если ошибок не было
if($error_flag == 0)
{
$DOCUMENT_ROOT = $_SERVER['DOCMENT_ROOT'];
$file = "/img/" . time()."_".basename($_FILES["myfile"]["name"]);
$upfile = getcwd().$file;
echo $upfile;
//echo "/img/".basename($_FILES["myfile"]["name"]);
chmod($file, 0644);

$upfile = getcwd()."/img/" . time()."_".basename($_FILES["myfile"]["name"]);
echo $upfile;
//echo "/img/".basename($_FILES["myfile"]["name"]);
chmod($upfile, 0644);

if ($_FILES['myfile']['tmp_name'])
{

//Если не удалось загрузить файл

if (!move_uploaded_file($_FILES['myfile']['tmp_name'], $upfile))
{
echo "$error_by_file";
exit;
}

}
else
{
echo 'Проблема: возможна атака через загрузку файла. ';
echo $_FILES['myfile']['name'];
exit;
}
switch($_POST['type']){
case 1:
$type="foto";
break;
case 2:
$type="sketch";
break;
case 3:
$type="plan";
break;
case 4:
$type="construction";
break;
case 5:
$type="image";
break;
case 6:
$type="model";
break;
}
$q = "INSERT INTO images (project_id, img, type) VALUES ('{$_POST['project_id']}', '$foto_name', '$type')";
$query = mysql_query($q);

// Данные успешно внесены в базу данных, выводим сообщение
if ($query == 'true') {
echo "
Картинка успешно добавлена на сервер!

Добавить еще картинку

На главную

";
}

// В противном случае, выводим ошибку при добавлении в базу данных
else {
echo "$error_by_mysql";
}
}
elseif ($myfile_size == 0) {
echo "
Картинка не выбрана!

Вернитесь и выберите картинку!

Выбрать картинку";
}
}
}
?>
  • Вопрос задан
  • 3435 просмотров
Подписаться 3 Оценить Комментировать
Решения вопроса 3
alekciy
@alekciy
Вёбных дел мастер
Сначала move_uploaded_file, а потом chmod.
Ответ написан
Комментировать
street
@street
Backend developer
Первый chmod не срабатывает, потому что у файла, к которому он применяется, указан не полный путь. Второй должен сработать, чисто теоретически. И не мешало бы выполнять chmod после move_file_upload.
Ответ написан
Комментировать
ScorpLeX
@ScorpLeX
Вы сначала генерируете путь и имя файла, потом используете chmod, а потом уже перемещаете в это место файл.
По хорошему нужно всегда включать error_reporting(-1); при разработке, в вашем случаи обязательно.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
vvpoloskin
@vvpoloskin
Инженер связи
Ваш ответ на вопрос

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

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