ftp_site () не хочет изменять CHMOD для папок - PullRequest
1 голос
/ 14 декабря 2011

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

Для этого я создаю сценарий, который будет перебирать каждую из необходимых папок и менять разрешения с 0775 на 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);
?>

Обратите внимание, что фактический скрипт намного больше из-за большого количества папок, которые необходимо изменить. Папки, показанные в $ folder_path = array () , являются просто примером

Когда я выполняю скрипт на моем сервере, я получаю следующий вывод:

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:
Я также должен упомянуть, что я пытался изменить значение CHMOD для каждой папки отдельно через FTP-клиент, и это успешно. Проблема возникает, когда я должен изменить их через скрипт. Тот же акк с правами доступа root используется от клиента FTP и скрипта для изменения файлов!

Ответы [ 2 ]

1 голос
/ 15 декабря 2011

Я нашел решение проблемы. Я сделал небольшую модификацию части скрипта 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 голосов
/ 15 декабря 2011

Вы пробовали просто включить слой Joomla FTP перед установкой компонентов / плагинов и т. Д.?

...