Права доступа к файлу PHP ... получение "записи"? - PullRequest
0 голосов
/ 26 августа 2009

Я пытаюсь написать скрипт установки для системы, над которой я работал. Сценарий копирует некоторые файлы по умолчанию из одного места в другое и создает для них различные папки. У меня этот бит работает, но единственная проблема заключается в том, что при входе по FTP я не могу редактировать или удалять файлы, которые PHP переместил для меня.

Если я войду в систему через терминал, я могу с радостью "sudo chmod -R 777 [dir]", и проблема исчезнет, ​​поэтому вопрос:

Чего мне не хватает в конце PHP?

Моя функция разрешений выглядит следующим образом:

function set_permissions($file) 
{
  if (file_exists($file)):
    chmod($file,0777);  
  endif;                
}

Я понимаю, что не на 100% идеально устанавливать разрешения для 777, но я просто пытаюсь добиться результата, что могу редактировать файлы через FTP после того, как PHP переместил их для меня.

Надеюсь, я был достаточно ясен. Это меня сейчас озадачивает, поэтому любая помощь приветствуется :)

Tom

редактирование: Весь процесс выглядит следующим образом:

mkdir($root_dir, 0777);
mkdir($images_dir, 0777);
if (!copy($orig_logo, $new_logo)) 
{
  echo "failed to copy $orig_logo...";
} 
  // see function above for details on set_permissions...       
  $this->set_permissions($new_logo);
}

(все пути тоже правильные)

1024 * редактировать *: Файл перед входом через терминал имеет следующие разрешения:

-rwxrwxrwx 1 www-data www-data 2739 2009-08-26 01:45 base.css

Файл после входа и изменения:

-rwxrwxrwx 1 www-data www-data 2739 2009-08-26 01:45 base.css

Система представляет собой систему управления контентом, которая позволяет редактировать и удалять файлы через область администратора, и, как ни странно, это работает хорошо. Кажется, что файлы каким-то образом заблокированы от кого-либо еще, кроме Apache ... но информация о файле предполагает иное. Странно ...

Ответы [ 3 ]

1 голос
/ 26 августа 2009

Похоже, что вашему каталогу также нужны разрешения на запись.

1 голос
/ 26 августа 2009

Если вы можете chmod -R 777 через терминал, чтобы решить проблему, тогда какие были разрешения, установленные PHP до того, как вы запустили chmod ??? Очевидно, что не 777. Я предполагаю, что ваш PHP код на самом деле не меняет разрешения.

Посмотрите на ваш код, ваша функция изменения разрешений может молча работать, если файл не существует - например, вы даете ему недопустимые имена файлов (неправильная папка? Неверный относительный путь?), Но вы не можете сказать, потому что ваша set_permissions() функция слишком напугана, чтобы предупредить вас. Вы должны переписать его следующим образом:

function set_permissions($file) 
{
  if (!file_exists($file))
    throw new Exception(__FUNCTION__ . "() file doesn't exist! '$file'");
  chmod($file,0777);
  error_log("chmod 777 $file"); // debug
}

Это позволяет вам видеть, что происходит, и вы наверняка заметите, если у вас нет правильных имен файлов.

1 голос
/ 26 августа 2009

Вы уверены, что файл существует или правильный путь?

...