2011-12-14 11 views
1

いくつかの拡張機能をインストールしたいjoomlaページがあります。しかし、chmod権限のため、私はパッケージをアップロードしてインストールすることができません。ガイドhereに続いて、プラグインをインストールするために、が多くのフォルダに変更されなければならないことがわかります。そのために ftp_site()はフォルダのCHMODを変更したくない

は、私が実際のスクリプトが原因にはるかに大きいことに注意してください必要な各フォルダを反復処理し、0777.

<?php 
// SET THE DESIRED CHMOD VALUE 
if ($_GET['chmod']) { 
     $ftp_chmod = $_GET['chmod']; 
    } 
    else { 
     $ftp_chmod = "0755"; 
    } 
echo "chmod=" . $ftp_chmod . '<br />'; 
echo getcwd() . '<br />'; 
$currdir = getcwd(); // get current directory 

// ESTABLISH AN FTP LOGIN SESSION 
$ftp_server='example.com'; 
$ftp_user='username'; 
$ftp_pass='*****'; 
$conn_id = ftp_connect("$ftp_server"); 

if (ftp_login($conn_id, $ftp_user, $ftp_pass)) { 
    echo 'FTP CONNECTION IS SUCCESSFULL <br />'; 
} 
else { 
    echo 'BAD CREDENTIALS'; 
    exit(); 
} 

// Define the folders for which the CHMODE will change the values 
// There must be a leading space in front of the path in order for CHMOD to work 
$folder_path = array(
    ' ' . $currdir . '/modules/', 
    ' ' . $currdir . '/plugins/' 
    ' ' . $currdir . '/tmp/', 
    ' ' . $currdir . '/cache/' 
); 

echo '<br />'; 
foreach ($folder_path as $key => $value) 
{ 
    $path = trim($value); // The leading space must be trimed fo is_dir() function to work 

    if (is_dir($path) == true) { 

     echo $path . ' -- ' . '<span style="color: #00B200">OK</span><br />'; 
     echo 'CHMOD ' . $ftp_chmod . ' ' . $value . '<br />'; 

     if (ftp_site($conn_id, 'CHMOD ' . $ftp_chmod . $value)) { 
      echo 'CHMOD ' . $ftp_chmod . ' IS <span style="color: #00B200">SUCCESSFULL</span><br /><br />'; 
     } 
     else { 
      echo '<span style="color: crimson">CHMOD FAILED!</span><br /><br />'; 
     } 
    } 
    else { 
     echo $path . ' -- ' . '<span style="color: crimson"><b>NOT EXIST</b></span><br />'; 
    } // end if (is_dir($path) == true) else 

} // end foreach ($folder_path as $key => $value) 

ftp_close($conn_id); 
?> 

に0775から権限を変更するスクリプトを作成しています多くのフォルダを変更する必要があります。$ folder_path =配列()に示すフォルダは

一例であり、私は自分のサーバー上でスクリプトを実行するとき、私はfolowind出力を得る:

chmod=0777 
/var/www/example/data/www/example.com 
FTP CONNECTION IS SUCCESSFULL 

/var/www/example/data/www/example.com/modules/ -- OK 
CHMOD 0777 /var/www/example/data/www/example.com/modules/ 
CHMOD FAILED! 

/var/www/example/data/www/example.com/plugins/ -- OK 
CHMOD 0777 /var/www/example/data/www/example.com/plugins/ 
CHMOD FAILED! 

/var/www/example/data/www/example.com/tmp/ -- OK 
CHMOD 0777 /var/www/example/data/www/example.com/tmp/ 
CHMOD FAILED! 

/var/www/example/data/www/example.com/cache/ -- OK 
CHMOD 0777 /var/www/example/data/www/example.com/cache/ 
CHMOD FAILED! 

を誰もが持っていますどのくらいのサイズでCHMOD値を変更するかについてのご意見はありますか?


UPDATE:
私も、私はFTPクライアントを経由して、個別に各フォルダにCHMOD値を変更しようとしたことを言及する必要があり、それが成功しています。問題は、私がスクリプトを通してそれらを変更しなければならないときに来る。 root権限アクセスと同じaccは、FTPクライアントとスクリプトからファイルを変更するために使用されます。

+0

ではなくFTP経由でのchmodをやろうと、あなたは、それを行うためのPHPスクリプトを書き、それをアップロードして、サーバー上で実行するだろうか?あなたのWebサーバユーザがそれをやる権限を持っていなければ 'exec( 'sudo chmod 777 dir')'できますか? – DaveRandom

+0

phpで実行されたときにsudoがどのようにパスワードを要求しますか? OPはまた、FTPクライアント経由のchmodが実際に動作することを言いますので、webuserとしてみてください* – codeling

+0

@nyarlathotep 'proc_open()'それでは?これは、Apache(または何でも)のユーザーがディレクトリを所有していない場合にのみ問題になります。 – DaveRandom

答えて

1

私はこの問題の解決策を見つけました。私がしたのはスクリプトのforeach部分を少し修正して作ったものでした。基本的には、getcwd()から返されたパスから必要な文字数を差し引いて問題を解決しました。ここで

私がした変更である:

---- REST OF THE SCRIPT OMITED ----- 

foreach ($folder_path as $key => $value) 
{ 
    $path = trim($value); // The leading space must be trimed fo is_dis() function to work 

    if (is_dir($path) == true) { 

     $value_short = substr($value, 19); // <------------- Subtruct the required number od chars in order to create a relative path 

     echo $path . ' -- ' . '<span style="color: #00B200">OK</span><br />'; 
     echo 'CHMOD ' . $ftp_chmod . ' ' . $value_short . '<br />'; 


     if (ftp_site($conn_id, "CHMOD $ftp_chmod $value_short")) { // <-------------- Use the relative path in the function 
      echo 'CHMOD ' . $ftp_chmod . ' IS <span style="color: #00B200">SUCCESSFULL</span><br /><br />'; 
     } 
     else { 
      echo '<span style="color: crimson">CHMOD FAILED!</span><br /><br />'; 
     } 
    } 
    else { 
     echo $path . ' -- ' . '<span style="color: crimson"><b>NOT EXIST</b></span><br />'; 
    } // end if (is_dir($path) == true) else 

} // end foreach ($folder_path as $key => $value) 

---- REST OF THE SCRIPT OMITED ----- 
0

コンポーネント/プラグインなどをインストールする前にJoomla's FTP layerを有効にしてみましたか?

関連する問題