Uy / Linux haqida umumiy ma'lumot / Php ishlaydi - Agar mavjud bo'lmasa, papka yarating. PHP da Mkdir funksiyasi, tavsifi va misollari Php papkasi mavjud bo'lmasa yaratish

Php ishlaydi - Agar mavjud bo'lmasa, papka yarating. PHP da Mkdir funksiyasi, tavsifi va misollari Php papkasi mavjud bo'lmasa yaratish

mkdir() funksiyasi belgilangan katalogda yangi papka yaratadi. Yaratish muvaffaqiyatli bo'lsa, True qiymatini qaytaradi. Yangi jild yaratishda siz $mode parametri yordamida unga kirish huquqlarini o'rnatishingiz mumkin. $rekursivni True ga o'rnatish orqali siz bir nechta pastki papkalarni yaratishingiz mumkin.

PHP versiyasi 4 va undan yuqori.

funktsiya bool mkdir(string $pathname [, int $mode [, bool $recursive [, resurs $kontekst]]])

mkdir funksiyasi parametrlari

$yo'l nomiYaratiladigan katalogga yo'l.
$ rejimiYaratilgan jildga huquqlar birinchi navbatda majburiy nolga ega bo'lgan sakkizlik qiymat sifatida belgilanadi (0777). Birinchi noldan tashqari, raqamlar egasi uchun, egalari guruhi uchun va boshqalar uchun kirish darajalarini ifodalaydi.
Kirish darajasi raqamlar bilan belgilanadi:
0 - kirish taqiqlangan;
1 - o'qishga kirish;
2 – yozish imkoniyati;
4 - bajarishga kirish.
Ko'pincha huquqlar umumiy miqdor sifatida belgilanadi, masalan:
7 – to'liq kirish (1+2+4);
5 – o‘qish va bajarish (1+4).
Standart qiymat 0777.
$rekursivIchki ichki kataloglarni yaratish mumkinligini aniqlaydigan mantiqiy parametr.
$kontekstOqimlar bilan ishlashda foydalaniladi. PHP 5.0.0 da qo'shilgan.

mkdir funksiyasidan foydalanishga misollar

mkdir( "yangi jild");

mkdir( "../yangi jild"); // bir daraja pastga

mkdir("/papka1/papka2/yangi papka"); // to'liq yo'l

mkdir( "yangi jild" , 0777); // tayinlangan huquqlarga ega jild yarating

Agar siz bir nechta pastki papkalarni yaratishingiz kerak bo'lsa, $recursive = True o'rnatishingiz kerak.

mkdir("papka1/papka2/yangi jild", 0777, rost); // joriy katalogda papka yaratish


ushbu maqolani nashr etishga faqat maqola muallifining veb-saytiga havola bilan ruxsat beriladi

Ushbu maqolada men papkalarni yaratish muammosini hal qilishning bir variantini tasvirlab beraman php yordamida xavfsiz rejimda.
PHP da papka yaratish uchun standart mkdir() funksiyasi mavjud, lekin ko'p hollarda u foydasiz bo'lib chiqadi va bu haqda ko'pchilik biladi, lekin bu muammoni hal qilish mumkinligini ko'pchilik bilmaydi.
Har bir narsa juda oddiy, siz o'rnatilgan yordamida papkalarni yaratishingiz kerak php funktsiyalari FTP.
Quyida men bu haqda batafsilroq yozaman.

Jild yaratishda mkdir() bilan bog'liq muammolar.
Ma'lumki, agar php-da yoqilgan bo'lsa xavfsiz rejim(safe_mode = yoqilgan), keyin mkdir() yordamida papkalarni (kataloglarni) yaratish ishlamaydi. Aniqroq qilib aytadigan bo'lsak, uni yaratishingiz mumkin, ammo bu jilddan keyingi foydalanish imkonsiz bo'ladi. Siz ushbu jildga fayllarni yuklay olmaysiz, uning nomini o'zgartira olmaysiz va uni o'chira olmaysiz, hatto FTP orqali kirgan bo'lsangiz ham (ba'zi hollarda FTP orqali o'chirishingiz mumkin).

Xavfsiz rejim sukut bo'yicha barcha serverlarda va barcha hosting provayderlarida yoqilgan. Xavfsiz rejimni o'chirish imkoniyati bo'lmasa, boshqa yo'l bor.

FTP yordamida php da papkalarni yaratish.
Deyarli barcha serverlar va xostinglar php-da ftp-ni qo'llab-quvvatlashga ega.
Ushbu funksiyalar yordamida biz mkdir() papkasini yaratish muammosini hal qilamiz.
FTP orqali papka yaratishga misol.

$conn_id = @ ftp_connect ("ftp.server.ru" , 21 , 5 ); // FTP serveriga ulanish
agar($conn_id) // agar serverga ulanish muvaffaqiyatli bo'lsa, davom eting
{
$login_result = @ftp_login($conn_id, "foydalanuvchi", "o'tish"); // FTP uchun login va parolingizni kiriting
agar($login_result) // agar server login parolini qabul qilgan bo'lsa, davom eting
{
// endi siz passiv rejimda o'ynashingiz kerak, uni yoqing yoki o'chiring (TRUE, FALSE)
// agar boshqa ftp funktsiyalari to'g'ri ishlamasa, ushbu parametrni o'zgartirib ko'ring (TRUE yoki FALE)
ftp_pasv($conn_id, TRUE); // bu holda passiv rejim yoqilgan
ftp_mkdir($conn_id, "1/2/3"); // va papkani yaratishning o'zi
}
}
ftp_close($conn_id); // va FTP ulanishini yoping
?>
Endi kod haqida katta izoh emas.
Birinchi qator FTP serveriga ulanadi. Odatda, mahalliy FTP serveriga ulanish uchun server sifatida localhost-ni ko'rsatish kifoya, lekin siz to'liq manzilni ham ko'rsatishingiz mumkin.
Passiv rejim yoqilgan yoki o'chirilganligi FTP sozlamalariga bog'liq.

Jildni yaratishda ehtiyot bo'ling, papka FTP kirish ildizidan yaratilgan. Ya'ni, bu yerdagi yo'llar yo'llardan farq qiladi fayl tizimi va papka FTP orqali ko'rilganidek yaratiladi.
Agar papkani yaratishda siz mening misolimda bo'lgani kabi bir nechta qo'shimchalarni ko'rsatsangiz, "1/2/3", bu holda barcha etishmayotgan papkalar yaratiladi. Agar "1" papkasi bo'lmasa, u yaratiladi va unda "2" papkasi va unda "3" papkasi hosil bo'ladi. Agar oraliq papkalar allaqachon mavjud bo'lsa, faqat etishmayotgan papkalar yaratiladi.
Jildni yaratishdan oldin, masalan, jildga o'tishingiz mumkin


Va bu funksiyadan so'ng siz papka yaratishingiz mumkin. Agar papkaga yo'l bosh chiziqsiz "2/3" sifatida ko'rsatilgan bo'lsa, u holda jild biz hozir joylashgan papkaga nisbatan yaratiladi. Ya'ni, "1/2/3" papkasi yaratiladi


Jild yaratishda bosh chiziq (/1/2/3) belgilansa, qaysi jildga ko'chganingizdan qat'iy nazar, papka FTP ildizidan yaratiladi.

Fikrlar

14.10.2009 Sergey
hamma narsa oddiy :)

12.12.2009 Viktor
Rahmat, hamma narsa ishlaydi, lekin ftp mijozida yaratilgan papkalar darhol ko'rinmaydi, uni qayta ishga tushirishingiz kerak, ya'ni. shunchaki serverdan uzib, qayta ulamang, balki dasturni yoping va uni qayta ishga tushiring (men FileZilla Client-dan foydalanaman).

14.12.2009 Admin
Menimcha, hammasi shu FTP mijozlari kesh fayllari va papkalari. Masalan, Total Commander-da bunday masalalar uchun maxsus "yangilash" tugmasi mavjud, bu FileZilla-da yo'qligi achinarli;

24.01.2010 Aleksandr
Qanday qilib FileZilla'da bunday narsa yo'q, menda 3.2.2 versiyasi bor, u allaqachon bir yoshga to'lgan va bunday funktsiya mavjud va esimda, u doimo bo'lgan!!!

27.08.2010 Vitaliy
Jildlar o'ng tomonda 755 bilan yaratilgan, ammo sizga 777 kerak.
Yaratish bosqichida papka FTP orqali qanday huquqlar yaratilishini qandaydir tarzda sozlash mumkinmi?

27.08.2010 Admin
Vitaliy, buning uchun funktsiya mavjud
ftp_chmod($conn_id, 0777, $fayl)
papka yoki fayl yaratgandan so'ng, undan foydalaning

28.08.2010 Vitaliy
rahmat, Admin!

09.12.2010 Andrey
Kechirasiz, nega men bir nechta katalog yaratmayman, ya'ni:

06.12.2011 Ilya
Nimadir yaxshi emas. Server bilan bog'liq muammolar:
Ogohlantirish: ftp_close() 19-qatordagi /home/bos/p/h/p/phpscripts/public_html/formf.php da berilgan mantiqiy bo'lgan 1 parametr resurs bo'lishini kutadi.

15.06.2011 Viktor
Ilya, u siz ftp_close funksiyasiga o'tayotgan birinchi parametr to'g'ri emasligini yozadi

29.06.2011 Aleksey
Andrey bilan bir xil muammo
(bir nechta katalog yaratilmagan)
ftp_mkdir ($conn_id, "1" // bu shunday ishlaydi
lekin bu kabi ftp_mkdir ($conn_id, "1/2/3" // ishlamaydi);
???

27.07.2011 Viktor
Aleksey, g'alati, men tekshirdim, u men uchun bir nechta papkalarni yaratadi.
Balki serverda qandaydir qiyin rejim yoqilgandir, keyin papkalarni birma-bir yaratishingiz kerak, avval 1-papkani yarating, keyin uni kiriting va unda 2-papkani yarating, keyin 2-papkani kiriting va unda 3-chi papkani yarating...

11/07/2011 k1-801 (Dmitriy mumkin)
Va men tushunganimdek, papkalarni o'chirish uchun
rmdir_ftp ($conn_id, $dir);
Xo'sh?

Aytgancha, negadir men uchun papka yaratmaydi (va xatolar yozmaydi ... g'alati ...)

03/10/2012 YA
Rahmat, aks holda men bu savol bilan qiynalgan edim.
va siz hamma narsani kechirasiz va asosiysi u ishlaydi

29.05.2012 Mixail
Albatta afsusdaman. Bu kodni qayerga yozishim kerak, aks holda men umuman yaxshi emasman, lekin men papka yaratishim kerak))

07.04.2012 Nomaq
Menda nimadir noto'g'ri... birinchi marta kod o'tkazib yuborilganda, ikkinchi marta bunday papka allaqachon mavjud deb aytilganda ... u yaratilayotganga o'xshaydi, lekin FTPni qayta ishga tushirgandan keyin ham ko'rinmaydi((((
va shuningdek, men PHP fayli joylashgan papkada emas, balki bir qadam orqaga qaytib, keyin boshqa papkaga kirib, uni o'sha erda yaratishim kerak.. shunga o'xshash narsa:
../papka1/yangi jild bu yerda
Iltimos, yordam bering, agar qiyin bo'lmasa) rahmat)

07.04.2012 Nomaq
Men yo'llarini aniqladim))) maqola uchun umuman rahmat, kamdan-kam odam nima ekanligini to'g'ri tushuntiradi)))

27.01.2013 CiliZ
Yaxshi, maqolaga hurmat

06.05.2013 Vasiliy
Korporativ papka asosiy element hisoblanadi korporativ identifikatsiya kompaniyalar. Bu kichik hajmdagi hujjatlar va qog'oz materiallarini biriktirish uchun mahsulot. Papkalar kompaniya ichida ham, hujjatlarni saqlash va ko'chirish uchun ham, reklama maqsadlarida ham qo'llaniladi. Batafsil ma'lumot veb-saytda: www.logodesigner.ru/papki

teglarni olib tashlash (12)

Men Bluehost-dan WordPress o'rnatish bilan bir nechta holatlarga duch keldim, u erda WordPress mavzusimda xatolarga duch keldim, chunki yuklashlar wp-content/uploads papkasi yo'q edi.

Ko'rinishidan, Bluehost cPanel WP o'rnatuvchisi bu papkani yaratmaydi, garchi HostGator qilsa ham.

Shuning uchun men mavzuga papkani tekshiradigan va uni boshqa yo'l bilan yaratadigan kodni qo'shishim kerak.

Javoblar

Buni sinab ko'ring:

Agar (!fayl_mavjud bo'lsa("yo'l/katalog")) ( mkdir("yo'l/katalog", 0777, rost); )

E'tibor bering, 0777 allaqachon kataloglar uchun standart rejim bo'lib, u hali ham joriy umask tomonidan o'zgartirilishi mumkin.

WordPress-da wp_mkdir_p juda qulay funksiya mavjud bo'lib, u rekursiv ravishda katalog tuzilishini yaratadi.

Malumot uchun manba: -

Funktsiya wp_mkdir_p($target) ( $wrapper = null; // protokolni ajratib oling if(wp_is_stream($target)) ( list($wrapper, $target) = explode("://", $target, 2); ) // php.net/mkdir dan foydalanuvchi hissa qo'shgan qaydlar $target = str_replace("//", "/", $target); // o'ramni yana nishonga qo'ying if($wrapper !== null) ( $target ); = $target ) // ma'lum PHP versiyalaridagi slash bilan ishlamay qoladi. if (empty($target)) $target = "/" if (file_exists($target)) $target_parent = while ("); " != $target_parent && ! is_dir($target_parent)) ( $target_parent = dirname($target_parent); ) // Ruxsat bitlarini oling. if ($stat = @stat($target_parent)) ( $dir_perms = $stat[ "mode"] & 0007777; ) else ( $dir_perms = 0777; ) if (@mkdir($target, $dir_perms, true)) ( // Agar $dir_perms ni oʻzgartiruvchi umask oʻrnatilgan boʻlsa, biz qayta ishlashimiz kerak boʻladi. $dir_perms ni chmod() bilan to'g'ri o'rnating 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; }

uchun ($i = 1; $i

Menga kirish sayti uchun ham xuddi shunday kerak. Men ikkita o'zgaruvchiga ega katalog yaratishim kerak edi. $ katalogi men foydalanuvchi litsenziya raqami bilan boshqa pastki jild yaratmoqchi bo'lgan asosiy papkadir.

Include_once("../include/session.php"); $lnum = $session->lnum; //Seanslardan foydalanuvchi litsenziya raqami $katalog = yuklangan_labels; // Bu jild yaratilayotgan katalog nomi if (!file_exists($directory."/".$lnum)) ( mkdir($directory."/".$lnum, 0777, true); )

Googleda ko'rinib turganidek, umumiyroq narsa. Tafsilotlar aniqroq bo'lsa-da, bu savolning sarlavhasi ko'proq umumiydir.

/** * rekursiv ravishda uzun katalog yo‘lini yarating */ function createPath($path) (agar (is_dir($path)) rost qaytaradi; $prev_path = substr($path, 0, strrpos($path, "/", - 2) + 1); $return = createPath($prev_path) ($return && is_writable($prev_path)) : false;

To'xtash darajasini ta'minlash orqali yaxshilash mumkin, shuning uchun u foydalanuvchi papkasidan yoki biror narsadan tashqariga chiqsa va ruxsatlarni yoqsa, muvaffaqiyatsiz bo'ladi.

Agar jild mavjud bo'lmasa, uni yaratish uchun

Ekologik muammoni ko'rib chiqish.

  • WordPress.
  • Veb hosting serveri.
  • Linux PHP ishlamaydi deb faraz qilsak.

bool mkdir(string $pathname[, int $mode=0777[, bool $recursive=FALSE[, resource$context]]])

Qo'llanmada aytilishicha, yagona talab qilinadigan parametr $pathname!

shuning uchun biz oddiygina kodlashimiz mumkin:

Tushuntirish:

Biz hech qanday parametrni o'tkazishimiz yoki papkaning mavjudligini yoki kerak bo'lsa, uzatish rejimi parametrini tekshirishimiz shart emas; quyidagi sabablarga ko'ra:

  • Buyruq 0755 (umumiy jild uchun standart ruxsat) yoki buyruq uchun standart ruxsat 0777 ruxsatiga ega jild yaratadi.
  • rejimi e'tiborga olinmaydi PHP bilan ishlaydigan Windows xost .
  • mkdir buyrug'i jildning mavjudligini tekshirishga ega; shuning uchun biz faqat True | ning qaytarilishini tekshirishimiz kerak yolg'on; va bu xato emas, bu faqat ogohlantirish va sukut bo'yicha hosting serverlarida ogohlantirish o'chirilgan.
  • Tezlikka qarab, ogohlantirish o'chirilgan bo'lsa, u tezroq bo'ladi.

Bu savolga qarashning yana bir usuli va eng yaxshi yoki optimal echimni talab qilmaslikdir.

PHP7, ishlab chiqarish serveri, Linuxda sinovdan o'tgan

Siz ham sinab ko'rishingiz mumkin:

$dirpath = "yo'l/to/dir"; $rejim = "0777"; is_dir($dirpath) || mkdir($dirpath, $rejim, rost);

If (!is_dir("path_directory")) ( @mkdir("path_directory"); )

Jild yaratishning tezroq usuli:

Agar (!is_dir("yo'l/katalog")) ( mkdir("yo'l/katalog", 0777, rost); )

qilasiz

Printf("Salom %s,
", $name);

o'rnatishdan oldin kukilar, bu taqiqlangan. Sarlavhalardan oldin hech qanday ma'lumotni, hatto bo'sh qatorni ham yubora olmaysiz.

PHP bitta funksiyaga ega - mkdir(), bu sizga veb-sayt serverida ba'zan uy sharoitida juda zarur bo'lgan kataloglarni yaratish imkonini beradi. Masalan, yangi material yaratishda siz uning uchun papka yaratishingiz kerak, u erda yana CMS-dan foydalanib, barcha kerakli fayllarni yuklaysiz.

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

Bular. ma'lum bir katalogda biz yangi papka yaratamiz va masalan, uning rejimini 0700 rejimiga o'rnatamiz, masalan, papkaga fayllarni yozish imkoniyatiga ega bo'lish uchun biz rejimni 0777 ga o'zgartiramiz.

Ammo bu erda mkdir() bilan bog'liq muammo paydo bo'ladi. Buni qilayotganda php skripti safe_mode server funksiyasi yoqilganda, egasi (UID) tekshiriladi va agar skript va papka egasi mos kelmasa, siz, masalan, yaratilgan katalogga fayl yoza olmasligingiz mumkin. undagi fayl yoki, masalan, FTP orqali siz papkani o'zi o'chira olmaysiz.

Ammo hosterdan siz uchun safe_mode funksiyasini o'chirib qo'yishni so'ramasdan, bu muammoning yanada oqlangan echimi bor (bu funksiya xavfsizlikni ta'minlash uchun sukut bo'yicha barcha xosting saytlarida yoqilgan). Asosan, pullik hosting xizmatlari ham ftp-ga kirishni ta'minlaydi va biz bundan boshlaymiz.

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

Funktsiyadagi birinchi o'zgaruvchi ftp serveringiz manzili, ikkinchisi ftp ga ulanadigan port va oxirgisi ruxsat etilgan ulanish vaqti. Vaqt tugashi haqida bir oz, bu keyingi tarmoq operatsiyalari uchun zarur bo'lsa, uni kiritmasangiz, standart qiymat 90 soniyaga o'rnatiladi. Ulanishdan so'ng biz u muvaffaqiyatli yoki yo'qligini tekshiramiz va login va parolni yuboramiz:

Agar($conn_ftp) // ulanish muvaffaqiyatli bo'lsa ( $login_result = @ftp_login($conn_ftp, "user", "pass"); // FTP uchun login va parolingizni kiriting if($login_result) // login va parolni tekshirishdan o'tgan muvaffaqiyat(ftp_pasv($conn_ftp, TRUE);))

Login va parolni tekshirgandan so'ng, biz passiv rejim haqida qaror qabul qilishimiz va uni TRUE yoki FALSE ga o'rnatishimiz kerak - bu boshqa FTP funktsiyalari to'g'ri ishlamasa kerak. Endi passiv rejimni aniqlagandan so'ng, biz papkalarimizni yaratishimiz mumkin, men kelajakda sizga foydali bo'lishi mumkin bo'lgan barcha funktsiyalarni tasvirlab beraman:

$fayl = ftp_mkdir($conn_ftp, "public_html/materials/345"); //Materiallar papkasida 345-katalog yaratish, agar materiallar papkasi mavjud boʻlmasa, //u ham xuddi public_html papkasi bilan yaratiladi (bu katalog //toʻliq yoʻlni koʻrishingiz uchun koʻrsatilgan, aks holda u faqat saytga ega papka) ftp_chdir($conn_ftp, "public_html/materials"); //Agar sizda, albatta, materiallar papkasi boʻlsa, unda siz //yoʻlni toʻliq yozishingiz shart emas, avval unga oʻtishingiz va keyin quyidagi ftp_mkdir ($conn_ftp,) kodidan foydalanib unda 345-papka yaratishingiz mumkin. "345") ftp_chmod ($ conn_ftp, 0777, $ fayl); //Barcha papkalar sukut bo'yicha 0755 rejimi bilan yaratilgan, bu buyruq //uni 0777 ga o'zgartirish imkonini beradi, bu esa yaratilgan papkaga fayllar qo'shish imkonini beradi.

Endi men ish kodining to'liq misolini keltiraman, shunda siz uning qanday ko'rinishini ko'rishingiz mumkin, masalan, meniki:

$dir_name = vaqt(); //Bu yerda papka nomini skript ishga tushirilgan vaqtga qarab yarataman $conn_ftp = @ftp_connect("your_ftp_server", 21, 5); if($conn_ftp) // ulanish muvaffaqiyatli bo'ldi ( $login_result = @ftp_login($conn_ftp, "user", "pass"); // FTP uchun login va parolingizni kiriting if($login_result) // login va parolni tekshirishdan o'tgan muvaffaqiyat (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); ) )

Yaratishda kataloglarni ko'rsatish haqida bir oz gapirishga arziydi, agar siz boshida slash belgilasangiz, papka ftp ildiziga nisbatan yaratiladi. FTP serveriga ulanishda siz doimo ildizga ulanasiz, shuning uchun buni yodda tuting.