2011-12-14 3 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에서 권한을 변경하는 스크립트를 작성하고 변경해야하는 많은 폴더.

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! 

사람이 가질 않습니다 : 내 서버에 스크립트를 실행하면$의 FOLDER_PATH에 표시된 폴더는 = 배열 ​​()내가 folowind 출력을 얻으려면, 예를 들어

있습니다 그래서 많은 폴더에 CHMOD 값을 변경하는 방법에 대한 의견이 있으십니까?


UPDATE :
나는 또한 내가 FTP 클라이언트를 통해 개별적으로 각 폴더에 chmod를 값을 변경하려고 한 것을 언급해야하고 성공적인이다. 문제는 스크립트를 통해 변경해야 할 때입니다. 루트 권한 액세스와 동일한 액세스은 FTP 클라이언트와 스크립트에서 파일을 변경하는 데 사용됩니다!

+0

는, 당신이 그것을 업로드하고 서버에서 실행 할 수있는 PHP 스크립트를 작성할 수 있습니다 여기에

내가했던 변화? 웹 서버 사용자에게 권한을 부여하지 않았다면'exec ('sudo chmod 777 dir')'할 수 있습니까? – DaveRandom

+0

PHP를 통해 실행될 때 sudo가 필요한 암호를 어떻게 쿼리합니까? OP는 또한 FTP 클라이언트를 통한 chmod가 실제로 작동한다고 언급했기 때문에 webuser로 할 때 *는 작동하지 않습니다. * – codeling

+0

@nyarlathotep'proc_open()'? 이것은 아파치 (또는 무엇이든) 사용자가 디렉토리를 소유하지 않은 경우에만 문제가 될 수 있습니다. – DaveRandom

답변

1

나는이 문제에 대한 해결책을 찾았습니다. 내가 한 일은 스크립트의 foreach 부분을 약간 수정하여 만든 것입니다. 기본적으로 getcwd()에서 반환 된 경로에서 필요한 수의 문자를 빼고 내 문제를 해결했습니다.

는 FTP를 통해 chmod를을하려고하기보다는
---- 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을 사용하도록 설정 했습니까?