Директива safe_mode = on, mkdir и решение проблем создания папок на сервере

В PHP есть единственная функция – mkdir(), которая позволяет создавать на сервере сайта директории, которые порой так необходимы в хозяйстве. Например, при создании нового материала вам необходимо создать под него папку, куда опять же средствами вашей CMS вы будете заливать все необходимые файлы.

Пример:

mkdir("/path/to/my/dir", 0700);

Т.е. в определенной директории мы создаем новую папку и например задаем ей режим mode 0700, например для того, чтобы в папку можно было записывать файлы режим mode меняем на 0777.

Но вот тут то и возникает проблема с mkdir().  При выполнении этого php скрипта при включенной функции сервера safe_mode происходит проверка владельца (UID) и если не совпадает владелец скрипта и папки, то возможно вы не сможете, например, записать файл в созданную директорию, удалить файл в ней или, например через FTP у вас не получится удалить саму папку.

Но есть более изящное решение этой проблемы, без необходимости просить хостера отключать вам функцию safe_mode (данная функция включена абсолютно на всех хостингах по умолчанию, с целью обеспечения безопасности). В основе своей платные хостинги предоставляют и доступ к ftp, именно от этого мы и будем отталкиваться.

$conn_ftp = @ftp_connect('your_ftp_server', 21, 5);

Первая переменная в функции это адрес вашего ftp сервера, вторая порт, по которому вы соединяетесь с ftp и последняя это допустимый таймаут соединения. Немного о таймауте, он необходим для последующих сетевых операций, если его не вводить, то ставится значение по умолчанию, равное 90 секундам. После соединения мы проверяем прошло ли оно успешно и отправляем логин и пароль:

if($conn_ftp) // соединение прошло успешно
{
    $login_result = @ftp_login($conn_ftp, 'user', 'pass'); // вводим свои логин и пароль для FTP
    if($login_result) // проверка логина и пароля прошла успешно
    {
        ftp_pasv ($conn_ftp, TRUE);
    }
}

После проверки логина и пароля нам необходимо определиться с пассивным режимом и выставить ему значения TRUE или FALSE - это необходимо если дальнейшие функции FTP будут работать неправильно. Теперь после определения пассивного режима мы можем создавать наши папки, я опишу все функции которые могут пригодиться вам в дальнейшем:

$file = ftp_mkdir ($conn_ftp, 'public_html/materials/345');
//Создание директории 345 в папке materials, если папки materials не существует,
//то она так же будет создана, так же и с папкой public_html (данная директория
//указана для того, чтобы вы видели весь путь, а так это просто папка с сайтом)

ftp_chdir ($conn_ftp, 'public_html/materials');
//Если у вас точно есть папка materials, то вам не обязательно прописывать весь
//путь, можно просто сначала в нее перейти и потом в ней создать папку 345 используя
//следующий код ftp_mkdir ($conn_ftp, '345')

ftp_chmod($conn_ftp, 0777, $file);
//Все папки по умолчанию создаются с режимом mode 0755, данная команда позволит сменить
//его на 0777, что позволит вам заносить файлы в созданную папку.

Теперь приведу полный пример рабочего кода, чтобы вы увидели как все это выглядит, например у меня:

$dir_name = time(); //Здесь я создаю имя папки по времени запуска скрипта
$conn_ftp = @ftp_connect('your_ftp_server', 21, 5);
if($conn_ftp) // соединение прошло успешно
{
    $login_result = @ftp_login($conn_ftp, 'user', 'pass'); // вводим свои логин и пароль для FTP
    if($login_result) // проверка логина и пароля прошла успешно
    {
        ftp_pasv ($conn_ftp, TRUE);
        ftp_chdir ($conn_ftp, 'public_html/materials');
        ftp_mkdir ($conn_ftp, $dir_name);
        ftp_chmod($conn_ftp, 0777, $dir_name);
    }
}

Стоит еще сказать немного об указании директорий при создании, если вы укажете в начале слэш, то папка будет создаваться относительно корня ftp. При подключении к серверу FTP вы всегда подключаетесь к корню, поэтому учтите этот момент.

Источник: http://feedproxy.google.com/~r/ruseller/CdHX/~3/3qxNpuckEQg/lessons.php

Читать комменты и комментировать

Добавить комментарий / отзыв



Защитный код
Обновить

Директива safe_mode = on, mkdir и решение проблем создания папок на сервере | | 2012-06-24 16:22:36 | | Статьи Web-мастеру | | В PHP есть единственная функция – mkdir(), которая позволяет создавать на сервере сайта директории, которые порой так необходимы в хозяйстве. Например, при создании нового материала вам необходимо | РэдЛайн, создание сайта, заказать сайт, разработка сайтов, реклама в Интернете, продвижение, маркетинговые исследования, дизайн студия, веб дизайн, раскрутка сайта, создать сайт компании, сделать сайт, создание сайтов, изготовление сайта, обслуживание сайтов, изготовление сайтов, заказать интернет сайт, создать сайт, изготовить сайт, разработка сайта, web студия, создание веб сайта, поддержка сайта, сайт на заказ, сопровождение сайта, дизайн сайта, сайт под ключ, заказ сайта, реклама сайта, хостинг, регистрация доменов, хабаровск, краснодар, москва, комсомольск |
 
Поделиться с друзьями: