Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > UID скрипта и файлов/дирректорий


Автор: CTYDEHT 5.5.2005, 14:46
Есть такая проблемка.

На сервере включен safe_mode, и этот safe_mode проверяет uid каталога и скрипта, который собирается что-то писать в этот каталог.

Дело в том, что это uid не совпадают. Когда создается каталог (с помощью этого же скрипта), то uid для него выставляется 99, хотя сам php выполняется под uid 32260.

Как следствие несовпадания uid - не разрешение что-либо делать в этом калалоге.

Мне нужно писать скрипт, который будет работать практически на любом сервере поэтому изменения настроек сервера по минимуму.

Вопрос: Это нормально, что выставляется "чужой" uid? (я слышал версию, что при safe_mode это нормально, т.е. так на всех серверах) Это правда?



Также буду признателен каждому, кто проведет следующий тест:

Если у вас есть какой-нибудь SHARE сервер, создайте в корневой дирректории папку и настройте права для нее 777. Зтем закачайте в нее php файл со следующим содержанием и выполните:

Код

<?php
  $root = $_SERVER["DOCUMENT_ROOT"];

  // здесь укажите тестовую папку, в которую вы поставите этот
  // скрипт и для которой укажите права доступа 777
  $dir = "/test";

  // create dir
  $oldmask = umask(0);
  mkdir("$root$dir/test_dir", 0777);
  umask($oldmask);

  // create file
  $text = "test file text";
  $res = fopen("$root$dir/test_dir/test_file.txt", "w");
  fwrite($res, $text);
  fclose($res);

  // read file
  $res = fopen("$root$dir/test_dir/test_file.txt", "r");
  $string = fread($res, 30);
    echo "<b>Read from file:</b> \"$string\"<br><br>\n";
  fclose($res);

  // show phpinfo
  phpinfo();
?>


Должна создаться еще одна папка в этой и файл в ней.

Затем напишите в этой теме:
- дало ли вам что-то вроде Warning: fopen(): SAFE MODE Restriction in effect. The script whose uid is...
- что было написано в Read from file: (долно быть "test file text")
- включен или выключен у вас safe_mode (это найдете в phpinfo())

Автор: Opik 5.5.2005, 14:51
Менять владельца: chown(), вот только при safe_mode не помню работает или нет. Выставляется не "чужой"... у PHP uid толи апача, то ли... ну вообщем у меня при safe_mode = on работать с созданным скриптом каталоге не получилось.

Автор: CTYDEHT 5.5.2005, 15:43
Opr, ты все таки не ответил.. это нормально что выставляется другой uid или нет?

и... проведи этот тест, если не сложно...

Автор: Opik 6.5.2005, 13:21
CTYDEHT
Тест проводить вовсе не обязательно, ибо на серваках где safe_mode = on именно такие предупреждения и будут, да это нормально.

Автор: CTYDEHT 10.5.2005, 12:43
хорошо... тогда такой вопрос...

я решил попробовать делать через FTP. ftp_mkdir() делает папку со стандартными правами (755), а мне нужно 777. umask(000) ничего не меняет... оно по-моему только для mkdir().

Можно как-то менять права на папку, используя php функции, которые работают с ftp ?

Автор: CTYDEHT 10.5.2005, 17:31
как изменять права через ftp с помощью php я разобрался... но возникла другая проблема... А вернее вопрос...

Функция copy() копирует файлы... а существует ли функция в php, которая копирует дирректории (именно копирует или перемещает, а не создает)...

Пробовал:
Код

  $root = $_SERVER["DOCUMENT_ROOT"];
  $dir = "/test2";

  copy ("$root/test_from", "$root$dir/test_to");

указывая в источнике на папку... но в назначении оказался файл...

Автор: Opik 11.5.2005, 08:26
Цитата(CTYDEHT @ 10.5.2005, 11:43)
хорошо... тогда такой вопрос...

я решил попробовать делать через FTP. ftp_mkdir() делает папку со стандартными правами (755), а мне нужно 777. umask(000) ничего не меняет... оно по-моему только для mkdir().

Можно как-то менять права на папку, используя php функции, которые работают с ftp ?

http://ee.php.net/manual/en/function.ftp-chmod.php

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)