Php chmod upload file

Права папок и файлов при загрузке

Подскажите как правильно подправить код, чтобы нормальные права ставил на файлы и папки при загрузке на сервер. Сервер на linux. Скрипт создает и загружает файлы без проблем, но если зайти файл — менеджером на сервер и попытаться удалить этот файл, выскакивает сообщение: Permission denied. Если удалить этот файл при помощи этого же скрипта, проблем не возникает.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
if ($_FILES['files']['error'][0] === UPLOAD_ERR_OK) { $upload_dir = ROOT_DIR . '/uploads/files/' . date('Y/m/'); //имя папки с файлами if (is_dir($upload_dir) == false) $dir = mkdir($upload_dir, 0777, true); //если нет папки, создаем foreach ($_FILES['files']['error'] as $key => $error)// цикл для нескольких файлов { if ($error == UPLOAD_ERR_OK)// если файл загружен продолжаем { if (is_uploaded_file($_FILES['files']['tmp_name'][$key])) { $info = pathinfo($_FILES['files']['name'][$key]); //получаем информацию загруженного файла $tmp = $_FILES['files']['tmp_name'][$key]; //временный путь до файла $nnamefile = date('Hi') . '_' . $info['filename'] . '_' . rand(1, 1000) . '.' . $info['extension']; $newnamefile = $upload_dir . $nnamefile; if (move_uploaded_file($tmp, $newnamefile)) { $newnamefile = '/uploads/files/' . date('Y/m/') . $nnamefile; $qfiles = "INSERT INTO `files` (`id`, `files_link`, `name`, `date`) VALUES ('', '$newnamefile', '$info[basename]', NOW())"; } } } }

Помогите решить проблему новичку.

Права доступа к папкам при загрузке файлов
Всем добрый день! Делаю загрузку картинок себе на локальный сервер у меня Apache2.2, вот код.

Читайте также:  Чем set отличается от list java

FTP не вижу файлов и папок (права на папку)
Сервер Debian 7. FTP сервер vsftpd. FTP клиент Filezilla. Настроил подключение, подключаюсь.

Не удается получить полные права для файлов и папок
Помогите получить полные права для файлов и папок сколько не пытался не получается.. Нужно именно.

При загрузке файлов на сервер у всех файлов пустой ContentLength
Подскажите, пожалуйста, с чем может быть связана следующая проблема. Есть страница состоящая из.

Источник

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

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

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» alt=»%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 (!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 (», ‘$foto_name’, ‘$type’)»;
$query = mysql_query($q);

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

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

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

Источник

Securing upload folders in PHP on Unix Servers

On many sites upload folders are set to 777 permissions. For many developers this is the easiest and quickest way of allowing Content Management Systems to upload files to the server. A more secure method is too use 755 permissions.

Please note this is for advanced users only — no responsibility will be taken for this going wrong

What does chmod 777 mean? ¶

Chmod 777 means that anyone can read, write and execute scripts in the specified folder on your server. So it means that anyone connected to the interent can write a file to the folder on your server and then execute it.

Chmod 755 ¶

Chmod 755 improves security on upload folders by limiting write access to the user of the folder. If you specify the user as the user running Apache / PHP this means that scripts executed by PHP will be able to write to the folder. This is perfect for uploading files.

How to do it ¶

Firstly you’ll need root access to your server. If you don’t have root access ask your hosts. They will either tell you that you can’t have it or they will give you the details.

Ensure that php is not running in safe mode. Ask your hosts. If it is you can stop it running in safe mode by accessing your sever as root via SSH and typing.

perl -p -i -e 's/safe_mode\s*=\s*on/safe_mode = off/i;' /etc/php.ini [hit enter]  /etc/init.d/httpd stop [hit enter]  /etc/init.d/httpd start [hit enter] 

Then browse to the folder one above your upload directory. Change the upload directory and all folders within the directory to 755 by typing

chmod -R 755 youruploaddirectory 

Then you need to change the owner name of the folder and all folders within the upload folder to the name running Apache and PHP. This is usually “www”, “apache” or “nobody.” Ask your hosting company if you are unsure. Then type

[root@yourservername] chown -R apache youruploaddirectory 

This should complete the process. You can test your upload permissions by uploading a file. It should only work when apache completes the process.

Of course this method is not totally secure. The only way of having total security is to not be connected to the internet.

Tags

Can you help make this article better? You can edit it here and send me a pull request.

Источник

Setting correct permissions for uploading files

I have a php script that uploads a file to a directory called «uploads». The only way I can get the upload to work is if I do:

  • How do I find out what users need access. e.g., what is the user name for apache or the web server?
  • What level of access do I need to give and what command would I use to do that.

Edit: I found lots of answers on stack overflow which I will research. For example

1 Answer 1

and look at the left-most column corresponding to the Apache server. This is the user that is running Apache, and by inheritance also PHP.

Change ownership of the upload directory to this user and restrict the permissions a bit, e.g. if the web server user was www-data that belongs to the group of the same name (using a sample path of /var/www/uploads ):

sudo chown www-data:www-data /var/www/uploads sudo chmod 755 /var/www/uploads 

(or whatever permissions you want in this instance). I use sudo in the example commands — I don’t know exactly how the EC2 systems are set up in this regard to get superuser privileges.

If you have already uploaded files/directories, you might want to change ownership and permissions on them as well. To do this, going from 777 to more reasonable permissions, you could run:

sudo chown -R www-data:www-data /var/www/uploads sudo chmod -R 755 /var/www/uploads sudo find /var/www/uploads -type f -exec chmod -x <> \; 

Don’t «blindly» run commands if you do not understand each part of them. Check the man pages if anything is unclear (it should be quite straightforward).

Источник

Оцените статью