Үй / Linux шолуы / Php жұмыс істейді - Егер ол бұрыннан жоқ болса, қалта жасаңыз. PHP-дегі Mkdir функциясы, сипаттамасы және мысалдары Php қалта жоқ болса, оны жасайды

Php жұмыс істейді - Егер ол бұрыннан жоқ болса, қалта жасаңыз. PHP-дегі Mkdir функциясы, сипаттамасы және мысалдары Php қалта жоқ болса, оны жасайды

mkdir() функциясы көрсетілген каталогта жаңа қалтаны жасайды. Жасау сәтті болса, True мәнін қайтарады. Жаңа қалтаны жасаған кезде оған кіру құқығын $mode параметрі арқылы орнатуға болады. $recursive параметрін True мәніне қою арқылы сіз бірнеше ішкі қалталарды жасай аласыз.

PHP нұсқасы 4 және одан жоғары.

функция bool mkdir(жол $жол аты [, int $mode [, bool $рекурсивті [, ресурс $контекст]]])

mkdir функциясының параметрлері

$жол атауыЖасалатын каталогқа жол.
$режиміЖасалған қалтаға құқықтар бірінші орында міндетті нөлмен (0777) сегіздік мән ретінде тағайындалады. Бірінші нөлден басқа сандар иесіне, иеленушілер тобына және басқалардың барлығына арналған кіру деңгейлерін білдіреді.
Қол жеткізу деңгейі сандармен анықталады:
0 – кіруге тыйым салынды;
1 – оқуға рұқсат;
2 – жазуға рұқсат;
4 – орындауға рұқсат.
Көбінесе құқықтар құрама сома ретінде көрсетіледі, мысалы:
7 – толық қол жеткізу (1+2+4);
5 – оқу және орындау (1+4).
Әдепкі мән – 0777.
$рекурсивтіКірістірілген ішкі каталогтарды жасауға болатындығын анықтайтын логикалық параметр.
$контекстАғындармен жұмыс істегенде қолданылады. PHP 5.0.0 нұсқасына қосылған.

mkdir функциясын қолдану мысалдары

mkdir( «жаңа қалта»);

mkdir( "../жаңа қалта" ); // бір деңгей төмен

mkdir("/қалта1/қалта2/жаңа қалта"); // толық жол

mkdir( "жаңа қалта" , 0777); // тағайындалған құқықтары бар қалтаны жасаңыз

Бірнеше ішкі қалталарды жасау қажет болса, $recursive = True орнату керек.

mkdir("қалта1/қалта2/жаңа қалта" , 0777, True ); // ағымдағы каталогта қалта құру


осы мақаланы жариялауға мақала авторының веб-сайтына сілтеме арқылы ғана рұқсат етіледі

Бұл мақалада мен қалталарды жасау мәселесін шешудің бір нұсқасын сипаттаймын php көмегіменқауіпсіз режимде.
PHP-де қалта жасау үшін стандартты mkdir() функциясы бар, бірақ көп жағдайда ол пайдасыз болып шығады және бұл туралы көп адамдар біледі, бірақ бұл мәселені шешуге болатынын көп адамдар біле бермейді.
Барлығы өте қарапайым, кірістірілген құрылғыны пайдаланып қалталарды жасау керек php функциялары FTP.
Төменде мен бұл туралы толығырақ жазамын.

Қалта жасау кезінде mkdir() ақаулары.
Өздеріңіз білетіндей, php-де қосылған болса қауіпсіз режим(safe_mode = қосулы), содан кейін mkdir() арқылы қалталарды (каталогтарды) жасау жұмыс істемейді. Дәлірек айтсақ, оны жасауға болады, бірақ бұл қалтаны одан әрі пайдалану мүмкін болмайды. Сіз бұл қалтаға файлдарды жүктей алмайсыз, оның атын өзгерте алмайсыз және сіз FTP арқылы кірсеңіз де (кейбір жағдайларда FTP арқылы жоюға болады) оны жою мүмкін емес.

Қауіпсіз режим әдепкі бойынша барлық серверлерде және барлық хостинг провайдерлерінде қосылады. Қауіпсіз режимді өшіру мүмкіндігі болмаса, шығудың басқа жолы бар.

FTP арқылы php-де қалталарды жасау.
Барлық дерлік серверлер мен хостингтерде php-де ftp қолдауы қосылған.
Осы функциялардың көмегімен біз mkdir() қалтасын құру мәселесін шешеміз.
FTP арқылы қалтаны құру мысалы.

$conn_id = @ ftp_connect («ftp.server.ru» , 21 , 5 ); // FTP серверіне қосылу
егер($conn_id) // серверге қосылу сәтті болса, жалғастырыңыз
{
$login_result = @ftp_login($conn_id, "пайдаланушы", "өту"); // FTP үшін логин мен құпия сөзді енгізіңіз
егер($логин_нәтиже) // егер сервер логин құпия сөзін қабылдаса, жалғастырыңыз
{
// енді пассивті режиммен ойнау керек, оны қосу немесе өшіру (ШЫН, ЖАЛҒАН)
// егер басқа ftp функциялары дұрыс жұмыс істемесе, осы параметрді өзгертіп көріңіз (TRUE немесе FALE)
ftp_pasv($conn_id, ШЫН); // бұл жағдайда пассивті режим қосылады
ftp_mkdir($conn_id, "1/2/3"); // және қалтаны жасаудың өзі
}
}
ftp_жабу($conn_id); // және FTP қосылымын жабыңыз
?>
Енді кодқа үлкен түсініктеме емес.
Бірінші жол FTP серверіне қосылады. Әдетте, жергілікті FTP серверіне қосылу үшін жергілікті хостты сервер ретінде көрсету жеткілікті, бірақ толық мекенжайды да көрсетуге болады.
Пассивті режимнің қосулы немесе өшірілгені FTP параметрлеріне байланысты.

Қалтаны жасаған кезде абай болыңыз, қалта FTP кіру түбірінен жасалған. Яғни, мұндағы жолдар соқпақтардан бөлек файлдық жүйежәне қалта FTP арқылы көрінетіндей жасалады.
Егер қалтаны жасау кезінде сіз менің мысалдағыдай бірнеше тіркемелерді көрсетсеңіз, «1/2/3», онда бұл жағдайда барлық жетіспейтін қалталар жасалады. Егер «1» папкасы болмаса, ол құрылады және оның ішінде «2» папкасы, ал оның ішінде «3» папкасы жасалады. Аралық қалталар бұрыннан бар болса, тек жетіспейтін қалталар жасалады.
Қалтаны жасамас бұрын, мысалы, қалтаға жылжытуға болады


Ал осы функциядан кейін қалтаны жасауға болады. Егер қалтаға жол алдыңғы қиғаш сызықсыз «2/3» ретінде көрсетілсе, онда қалта біз қазір орналасқан қалтаға қатысты жасалады. Яғни, «1/2/3» папкасы жасалады


Қалтаны жасау кезінде алдыңғы қиғаш сызықты (/1/2/3) көрсетсеңіз, қай қалтаға жылжытқаныңызға қарамастан, қалта FTP түбірінен жасалады.

Пікірлер

14.10.2009 Сергей
тапқырлардың бәрі қарапайым :)

12.12.2009 Виктор
Рахмет, бәрі жұмыс істейді, бірақ ftp клиентінде жасалған қалталар бірден көрінбейді, оны қайта іске қосу керек, яғни. серверден ажыратып, қайта қосылып қана қоймай, бағдарламаны жауып, қайта іске қосыңыз (мен FileZilla Client пайдаланамын).

14.12.2009 Admin
Менің ойымша, бұл бәрі FTP клиенттерікэш файлдары мен қалталары. Мысалы, Total Commander-де мұндай мәселелер үшін арнайы «жаңарту» түймесі бар, бұл FileZilla-да жоқ.

24.01.2010 Александр
Қалайша FileZilla-да мұндай нәрсе жоқ, менде 3.2.2 нұсқасы бар, оған бір жыл болды және мұндай функция бар және менің есімде ол әрқашан болды!!!

27.08.2010 Виталий
Қалталар оң жақта 755 арқылы жасалады, бірақ сізге 777 қажет.
Жасау кезеңінде қалтаның FTP арқылы жасалатын құқықтарын қандай да бір жолмен конфигурациялауға болады ма?

27.08.2010 Admin
Виталий, бұл үшін функция бар
ftp_chmod($conn_id, 0777, $файл)
қалтаны немесе файлды жасағаннан кейін оны пайдаланыңыз

28.08.2010 Виталий
рахмет, админ!

12.09.2010 Андрей
Кешіріңіз, неге мен бірнеше каталог жасамаймын, яғни:

12.06.2011 Илья
Бірдеңе дұрыс емес. Сервер мәселелері:
Ескерту: ftp_close() 19-жолда /home/bos/p/h/p/phpscripts/public_html/formf.php ішінде логикалық берілген ресурс 1 параметрін күтеді.

15.06.2011 Виктор
Илья, ол ftp_close функциясына бірінші беріп жатқан параметр дұрыс емес деп жазады

29.06.2011 Алексей
Андрей сияқты проблема
(бірнеше каталог жасалмайды)
ftp_mkdir ($conn_id, "1" // ол осылай жұмыс істейді
бірақ бұл сияқты ftp_mkdir ($conn_id, «1/2/3» // жұмыс істемейді);
???

27.07.2011 Виктор
Алексей, біртүрлі, мен тексердім, ол мен үшін бірнеше қалта жасайды.
Серверде қандай да бір күрделі режим қосылған болуы мүмкін, содан кейін қалталарды бір-бірлеп жасау керек, алдымен 1-қапшықты жасаңыз, содан кейін оны енгізіңіз және оған 2-қапшықты жасаңыз, содан кейін 2-қапшықты енгізіңіз және оған 3-ті жасаңыз...

11.07.2011 k1-801 (Дмитрий мүмкін)
Менің түсінуімше, қалталарды жою үшін
rmdir_ftp($conn_id, $dir);
Сонымен?

Айтпақшы, ол қандай да бір себептермен мен үшін қалта жасамайды (және қателер жазбайды ... біртүрлі ...)

10.03.2012 Я
Рахмет, әйтпесе осы сұрақпен қиналып кеттім.
және сіз бәрін кешіресіз, ең бастысы ол жұмыс істейді

29.05.2012 Михаил
Әрине кешіремін. Бұл кодты қайда жазуым керек, әйтпесе мен оны мүлдем жақсы білмеймін, бірақ мен шынымен қалта жасауым керек))

07.04.2012 Nomaq
Менде бірдеңе дұрыс емес... бірінші рет код өткізіп жібергенде, екінші рет мұндай қалта бұрыннан бар дейді... ол жасалып жатқан сияқты, бірақ FTP қайта іске қосылғаннан кейін де көрінбейді((((
және де, мен қалтаны PHP файлы орналасқан қалтада емес, бір қадам артқа қайтару керек, содан кейін басқа қалтаны енгізіп, оны сол жерде жасауым керек.. келесідей нәрсе:
../folder1/new қалта осында
қиын болмаса көмектесіңізші) рахмет)

07.04.2012 Nomaq
Мен жолдарын анықтадым))) жалпы мақала үшін рахмет, ненің қалай екенін дұрыс түсіндіретін адам сирек)))

27.01.2013 CiliZ
Жарайсың, мақалаға құрмет

05.06.2013 Василий
Корпоративтік қалта негізгі элемент болып табылады корпоративтік сәйкестіккомпаниялар. Бұл аз мөлшердегі құжаттар мен қағаз материалдарын бекітуге арналған өнім. Қалталар компания ішінде де, құжаттарды сақтау және жылжыту үшін де, жарнамалық мақсаттарда да қолданылады. Толығырақ веб-сайтта: www.logodesigner.ru/papki

тегтерді жою (12)

Мен Bluehost-тен WordPress қондырғыларымен бірнеше жағдайға тап болдым, онда мен WordPress тақырыбымда қателерге тап болдым, себебі wp-content/uploads қалтасы жүктеп салынбаған.

Bluehost cPanel WP орнатушысы бұл қалтаны жасамайды, бірақ HostGator жасайды.

Сондықтан мен қалтаны тексеретін және оны басқаша жасайтын тақырыпқа код қосуым керек.

Жауаптар

Мынаны қолданып көріңіз:

Егер (!файл_бар("жол/каталог")) ( mkdir("жол/каталог", 0777, шын); )

0777 қазірдің өзінде каталогтар үшін әдепкі режим болып табылатынын және оны әлі де ағымдағы umask арқылы өзгертуге болатынын ескеріңіз.

WordPress-те сонымен қатар каталог құрылымын рекурсивті түрде жасайтын өте ыңғайлы wp_mkdir_p функциясы бар.

Анықтама көзі: -

Функция wp_mkdir_p($target) ( $wrapper = null; // протоколды ажыратыңыз if(wp_is_stream($target)) ( list($wrapper, $target) = explode("://", $target, 2); ) // php.net/mkdir сайтынан пайдаланушы қосқан ескертпелер $target = str_replace("//", "/", $target); // ораманы мақсатқа қайта қойыңыз if($wrapper !== null) ( $target ); = $target ) // белгілі бір PHP нұсқалары үшін $target ($target, "/"); if (empty($target)) $target = "/" if (file_exists($target)) қайтару @is_dir($target) және оны мұрагер $target_parent ("); " != $target_parent && ! is_dir($target_parent)) ( $target_parent = dirname($target_parent); ) // Рұқсат биттерін алыңыз. if ($stat = @stat($target_parent)) ( $dir_perms = $stat[ "mode"] & 0007777; ) else ( $dir_perms = 0777; ) if (@mkdir($target, $dir_perms, true)) ( // $dir_perms өзгертетін umask орнатылса, біз "қайта өңдеуіміз керек" $dir_perms параметрін chmod() арқылы дұрыс орнатыңыз if ($dir_perms != ($dir_perms & ~umask())) ( $folder_parts = explode( "/", substr($target, strlen($target_parent) + 1));<= count($folder_parts); $i++) { @chmod($target_parent . "/" . implode("/", array_slice($folder_parts, 0, $i)), $dir_perms); } } return true; } return false; }

үшін ($i = 1; $i

Маған кіру сайты үшін де солай қажет. Маған екі айнымалысы бар каталог жасау керек болды. $ каталогы - пайдаланушылар лицензиясының нөмірі бар басқа ішкі қалтаны жасағым келетін негізгі қалта.

Include_one("../include/session.php"); $lnum = $session->lnum; //Сеанстардағы пайдаланушылар лицензиясының нөмірі $директоры = жүктелген_белгілер; // Егер (!file_exists($directory."/".$lnum)) ( mkdir($directory."/".$lnum, 0777, шын); ) қалта жасалып жатқан каталогтың аты.

Google-да көрінетіндей жалпырақ нәрсе. Мәліметтер нақтырақ болғанымен, бұл сұрақтың тақырыбы жалпылама болып табылады.

/** * ұзақ каталог жолын рекурсивті түрде жасау */ function createPath($path) ( егер (is_dir($path)) ақиқат қайтарады; $prev_path = substr($path, 0, strrpos($path, "/", - 2) + 1); $return = createPath($prev_path) қайтару ($қайтару && is_writable($prev_path)) : false;

Тоқтату деңгейін қамтамасыз ету арқылы жақсартуға болады, сондықтан ол пайдаланушы қалтасынан немесе басқа нәрседен тыс болса және рұқсаттарды қосу сәтсіз аяқталады.

Қалта жоқ болса, оны жасау үшін

Экологиялық мәселені қарастыру.

  • WordPress.
  • Веб-хостинг сервері.
  • Linux жүйесінде PHP жұмыс істемейді деп есептейміз.

бол mkdir(жол $жол аты[, int $mode=0777[, bool $рекурсивті=ЖАЛҒАН[, ресурс$контекст]]])

Нұсқаулықта жалғыз талап етілетін параметр $pathname екенін айтады!

сондықтан біз жай ғана кодтай аламыз:

Түсініктеме:

Бізге ешқандай параметрді берудің немесе қалтаның бар-жоғын тексерудің немесе қажет болса, тасымалдау режимінің параметрін тексерудің қажеті жоқ; келесі себептер бойынша:

  • Пәрмен 0755 (жалпы қалта үшін әдепкі рұқсат) немесе пәрмен үшін әдепкі рұқсат 0777 рұқсаты бар қалтаны жасайды.
  • режимінде еленбейді PHP жұмыс істейтін Windows хосты .
  • mkdir пәрменінде қалтаның бар-жоғын тексеру бар; сондықтан бізге тек True | қайтаруын тексеру керек Жалған; және бұл қате емес, ол тек ескерту және ескерту әдепкі бойынша хостинг серверлерінде өшірілген.
  • Ескерту өшірілген болса, жылдамдыққа байланысты жылдамырақ болады.

Бұл сұрақты қараудың және ең жақсы немесе оңтайлы шешімді талап етпеудің тағы бір тәсілі.

PHP7, Production Server, Linux жүйелерінде сыналған

Сондай-ақ көріңіз:

$dirpath = "жол/баратын жол"; $rejim = "0777"; is_dir($dirpath) || mkdir($дирпат, $режим, шын);

Егер (!is_dir("жол_каталогы")) ( @mkdir("жол_каталогы"); )

Қалтаны жасаудың жылдам жолы:

Егер (!is_dir("жол/каталог")) ( mkdir("жол/каталог", 0777, шын); )

жасайсың

Printf("Сәлеметсіз бе %s,
", $аты);

орнату алдында печенье, бұл тыйым салынған. Тақырыптардың алдында ешқандай деректерді, тіпті бос жолды да жібере алмайсыз.

PHP бір ғана функциясы бар - mkdir(), ол веб-сайт серверінде кейде үй шаруашылығында өте қажет болатын каталогтарды жасауға мүмкіндік береді. Мысалы, жаңа материал жасаған кезде, сіз оған қалта жасауыңыз керек, онда қайтадан CMS көмегімен барлық қажетті файлдарды жүктейсіз.

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

Сол. белгілі бір каталогта біз жаңа қалтаны жасаймыз және, мысалы, оның режимін 0700 режиміне орнатамыз, мысалы, файлдарды қалтаға жаза алу үшін режимді 0777-ге өзгертеміз.

Бірақ бұл жерде mkdir() мәселесі туындайды. Мұны істегенде php сценарийіқауіпсіз_режим серверінің функциясы қосылғанда, иесі (UID) тексеріледі және сценарий мен қалтаның иесі сәйкес келмесе, сіз, мысалы, жасалған каталогқа файл жаза алмауыңыз мүмкін. ондағы файл немесе, мысалы, FTP арқылы қалтаны жою мүмкін болмайды.

Бірақ хосттерден safe_mode функциясын өшіруді сұрамай-ақ, бұл мәселенің неғұрлым талғампаз шешімі бар (бұл функция қауіпсіздікті қамтамасыз ету үшін әдепкі бойынша барлық хостинг сайттарында қосылған). Негізінде, ақылы хостинг қызметтері ftp-ге қол жеткізуді қамтамасыз етеді және біз осыдан бастаймыз.

$conn_ftp = @ftp_connect («сіздің_ftp_серверіңіз», 21, 5);

Функциядағы бірінші айнымалы мән - ftp серверінің мекенжайы, екіншісі - ftp-ге қосылатын порт, ал соңғысы - рұқсат етілген қосылым күту уақыты. Күту уақыты туралы аздап, ол келесі желілік операциялар үшін қажет, егер сіз оны енгізбесеңіз, әдепкі мән 90 секундқа орнатылады. Қосылғаннан кейін біз оның сәтті болғанын тексереміз және логин мен парольді жібереміз:

Егер($conn_ftp) // қосылым сәтті болса ( $login_result = @ftp_login($conn_ftp, "user", "pass"); // FTP үшін логин мен құпия сөзді енгізіңіз if($login_result) // логин мен құпия сөзді растау өтті сәттілік(ftp_pasv($conn_ftp, TRUE);))

Логин мен парольді тексергеннен кейін біз пассивті режимді таңдап, оны ШЫН немесе ЖАЛҒАН етіп орнатуымыз керек - бұл FTP функциялары дұрыс жұмыс істемейтін жағдайда қажет. Енді пассивті режимді анықтағаннан кейін біз қалталарымызды жасай аламыз, мен болашақта сізге пайдалы болуы мүмкін барлық функцияларды сипаттаймын:

$файл = ftp_mkdir($conn_ftp, "public_html/materials/345"); //Материалдар қалтасында 345 каталогын жасау, егер материалдар қалтасы жоқ болса, //ол да жасалады, public_html қалтасымен бірдей (бұл каталог // сіз бүкіл жолды көре алатындай етіп көрсетілген, әйтпесе ол жай ғана сайты бар қалта) ftp_chdir($conn_ftp, "public_html/materials"); //Егер сізде сөзсіз материалдар қалтасы болса, онда //жолды толық жазудың қажеті жоқ, алдымен оған өтіп, одан кейін //келесі ftp_mkdir ($conn_ftp,) кодын пайдаланып онда 345 қалтасын жасауға болады. "345") ftp_chmod($ conn_ftp, 0777, $файл); //Барлық қалталар әдепкі бойынша 0755 режимімен жасалады, бұл пәрмен //оны 0777-ге өзгертуге мүмкіндік береді, бұл құрылған қалтаға файлдарды қосуға мүмкіндік береді.

Енді мен жұмыс кодының толық мысалын беремін, сонда сіз оның қалай көрінетінін көре аласыз, мысалы, менікі:

$dir_name = уақыт(); //Мұнда мен қалта атауын сценарий іске қосылған уақыт негізінде жасаймын $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 серверіне қосылу кезінде сіз әрқашан түбірге қосыласыз, сондықтан мұны есте сақтаңыз.