Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Прова доступа для PHP  (Прочитано 692 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн torman

  • Автор темы
  • Новичок
  • *
  • Сообщений: 8
    • Просмотр профиля
Прова доступа для PHP
« : 31 Августа 2011, 18:27:26 »
Извеняюсь сразу если не там создал тему , но у меня проблема поднял сервак LAMP написал скрипт на PHP чтобы создал папку с провами 777 но он создал с другими провами  , почему /var/www/test/  - папка test создалась не справами 777 почему так происходит ?
P.S Можно через терминал выставить права на папки и тд.  sudo chmod -R 777 /var/www/ работает на ура , но мне нужно чтобы PHP сам выставлял прова , а не я руками крутил каждые 2-3 минуты в терминале .

Оффлайн NanoGlist

  • Активист
  • *
  • Сообщений: 283
  • Даешь наноглистинг!!!!
    • Просмотр профиля
Re: Прова доступа для PHP
« Ответ #1 : 31 Августа 2011, 19:35:29 »
Для начала неплохо бы было взглянуть на скрипт, ну и ваши прОва уж очень ухо режут  :D

Оффлайн torman

  • Автор темы
  • Новичок
  • *
  • Сообщений: 8
    • Просмотр профиля
Re: Прова доступа для PHP
« Ответ #2 : 31 Августа 2011, 19:43:36 »
Сам в шоке в спешке пишу всегда .

Цитировать
if ( $_POST['dir_name'] != '' )
{
$dir_name = $_POST['dir_name'];
$cr_dir = mkdir( $dir_name , 0777 );
if ( $cr_dir )
{
print'Каталог "'.$dir_name.'" успешно создан!<br /><a href="ss.php">Создать ещё</a>';
}
else
{
print'Каталог "'.$dir_name.'" создать не удалось, ';
if ( is_dir( $dir_name ) )
{
print'т.к. каталог с таким именем уже существует';
}
else
{
print'попробуйте изменить права доступа';
}
print'!<br /><a href="ss.php">Попытаться ещё</a>';
}
}
else
{
print'Вы не ввели имя!<br /><a href="ss.php">Попытаться ещё</a>';
}
}
else
{
print'<form action="ss.php" method="post">
Имя новой папки:<br /><input type="text" name="dir_name" /><br />
<input type="submit" value="Создать" />
</form>';
}
?>

Пользователь решил продолжить мысль 31 Августа 2011, 19:46:04:
Мне сказали что-бы я копал в сторону umask это так ?
« Последнее редактирование: 31 Августа 2011, 19:46:04 от torman »

Оффлайн NanoGlist

  • Активист
  • *
  • Сообщений: 283
  • Даешь наноглистинг!!!!
    • Просмотр профиля
Re: Прова доступа для PHP
« Ответ #3 : 31 Августа 2011, 19:58:18 »
Для работы с файловой системой в режиме safe_mode проверяется UID владельца скрипта и UID владельца файла/директории и если они не совпадают
[b]man umask[/b]
The constants that should be used to specify mask are described under stat(2).

       The typical default value for the process umask is S_IWGRP | S_IWOTH (octal 022).  In the usual case where the mode argument to open(2) is specified as:

           S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH

       (octal 0666) when creating a new file, the permissions on the resulting file will be:

           S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH

       (because 0666 & ~022 = 0644; i.e., rw-r--r--).
....даже если на саму директорию стоят права на чтение/запись для всех. Если владелец корневой директории root, а владелец скрипта пользователь с UID ххх. Т.ч. надо использовать директории у которых вы являетесь владельцем. или отключить safe_mode.
« Последнее редактирование: 31 Августа 2011, 20:13:00 от NanoGlist »

Оффлайн torman

  • Автор темы
  • Новичок
  • *
  • Сообщений: 8
    • Просмотр профиля
Re: Прова доступа для PHP
« Ответ #4 : 31 Августа 2011, 20:48:22 »
Зашёл в php.ini отрубил safe_mode но всё также по прежнему .

Оффлайн NanoGlist

  • Активист
  • *
  • Сообщений: 283
  • Даешь наноглистинг!!!!
    • Просмотр профиля
Re: Прова доступа для PHP
« Ответ #5 : 31 Августа 2011, 22:21:54 »
покажите
1) ls -l /var/www
2) ls -l /var/ | grep www уж простите за банальность
Под кем запускаете скрипт ?

Но перед эти попробуйте вот так:

if ( $_POST['dir_name'] != '' )
{
$dir_name = $_POST['dir_name'];
$cr_dir = mkdir( $dir_name , 0777, true );
chmod($dir_name, 0777);

или

if ( $_POST['dir_name'] != '' )
{
$dir_name = $_POST['dir_name'];
$old=umask(0);
$cr_dir = mkdir( $dir_name , 0777 );
umask=($old);
« Последнее редактирование: 31 Августа 2011, 22:33:58 от NanoGlist »

Оффлайн torman

  • Автор темы
  • Новичок
  • *
  • Сообщений: 8
    • Просмотр профиля
Re: Прова доступа для PHP
« Ответ #6 : 31 Августа 2011, 22:47:14 »
NanoGlist ты красавчег , я думал так и не решу свою проблему .... уже не один форум облазил и тд ..
if ( $_POST['dir_name'] != '' )
{
$dir_name = $_POST['dir_name'];
$cr_dir = mkdir( $dir_name , 0777, true );
chmod($dir_name, 0777);
Вот это помогло . .

Оффлайн NanoGlist

  • Активист
  • *
  • Сообщений: 283
  • Даешь наноглистинг!!!!
    • Просмотр профиля
Re: Прова доступа для PHP
« Ответ #7 : 31 Августа 2011, 22:50:33 »
Честно говоря это не я ))) Это все великий гугл.
P.S. Если есть желание, вруби обратно safe_mode в php.ini и проверь будет работать или нет  :D

Оффлайн torman

  • Автор темы
  • Новичок
  • *
  • Сообщений: 8
    • Просмотр профиля
Re: Прова доступа для PHP
« Ответ #8 : 01 Сентября 2011, 01:07:37 »
Ок это уже утром или вечером .. но всё равно спасибо ! что всё работает .. а то одни советы , то другие , то вообще немыслемый бред не втему некоторые несут .  :'(

 

Страница сгенерирована за 0.062 секунд. Запросов: 25.