0

作業中のシステムのインストール スクリプトを作成しようとしています。このスクリプトは、いくつかの既定のファイルをある場所から別の場所にコピーし、それらのためにさまざまなフォルダーを作成します。私はこれでちょっとした作業をしていますが、唯一の問題は、FTP 経由でログインすると、PHP が移動したファイルを編集または削除できないことです。

ターミナル経由でログインすると、「sudo chmod -R 777 [dir]」で問題が解決するので、問題は次のとおりです。

PHP側で何が欠けていますか?

私の許可機能は次のとおりです。

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

アクセス許可を 777 に設定するのが 100% 理想的ではないことは理解していますが、PHP がファイルを移動した後、FTP 経由でファイルを編集できるという結果を達成しようとしているだけです。

私が十分に明確であることを願っています。これは今私を困惑させているので、どんな助けも大歓迎です:)

トム

編集: プロセス全体は次のとおりです。

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);
}

(すべてのパスも正しいです)

edit :ターミナル経由でログインする前のファイルには、次の権限があります。

-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以外から何らかの形でロックアウトされているように見えますが、ファイル情報はそうではないことを示唆しています。それは奇妙です...

4

3 に答える 3

1

ファイルが存在するか、パスが正しいか確認してください。

于 2009-08-26T00:23:50.010 に答える
1

ディレクトリにも書き込み権限が必要なようです。

于 2009-08-26T00:26:31.087 に答える
1

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
}

これにより、何が起こっているかを確認することができ、ファイル名が正しくない場合は確実に気付くでしょう。

于 2009-08-26T00:38:48.567 に答える