Otthon / Linux áttekintés / Php működik - Hozzon létre egy mappát, ha még nem létezik. Mkdir függvény PHP-ben, leírás és példák Php mappa létrehozása, ha nem létezik

Php működik - Hozzon létre egy mappát, ha még nem létezik. Mkdir függvény PHP-ben, leírás és példák Php mappa létrehozása, ha nem létezik

Az mkdir() függvény új mappát hoz létre a megadott könyvtárban. Ha a létrehozás sikeres, a True értéket adja vissza. Új mappa létrehozásakor a $mode paraméterrel beállíthatunk hozzá hozzáférési jogokat. A $recursive True értékre állításával több almappát is létrehozhat.

PHP 4-es és újabb verzió.

függvény bool mkdir(string $pathname [, int $mode [, bool $rekurzív [, erőforrás $kontextus]]])

mkdir függvény paraméterei

$elérési útnévA létrehozandó könyvtár elérési útja.
$módA létrehozott mappához tartozó jogok oktális értékként vannak hozzárendelve, és mindenekelőtt egy kötelező nulla (0777). Az első nullán kívül a számok a tulajdonos, a tulajdonos csoportja és mindenki más hozzáférési szintjeit jelentik.
A hozzáférési szintet a számok határozzák meg:
0 – hozzáférés megtagadva;
1 – olvasási hozzáférés;
2 – írási hozzáférés;
4 – végrehajtási hozzáférés.
Leggyakrabban a jogokat összetett összegként adják meg, például:
7 – teljes hozzáférés (1+2+4);
5 – olvasás és végrehajtás (1+4).
Az alapértelmezett érték 0777.
$rekurzívLogikai paraméter, amely meghatározza, hogy létrehozhatók-e beágyazott alkönyvtárak.
$kontextusA folyamokkal való munka során használatos. PHP 5.0.0-ban hozzáadva.

Példák az mkdir függvény használatára

mkdir( "újmappa" );

mkdir( "../újmappa" ); // egy szinttel lejjebb

mkdir("/mappa1/mappa2/újmappa" ); // teljes elérési út

mkdir( "újmappa" , 0777); // hozzon létre egy mappát hozzárendelt jogokkal

Ha több almappát kell létrehoznia, akkor a $recursive = True értéket kell beállítania.

mkdir("mappa1/mappa2/újmappa" , 0777, igaz ); // mappa létrehozása az aktuális könyvtárban


a cikk közzététele csak a cikk szerzőjének webhelyére mutató hivatkozással engedélyezett

Ebben a cikkben leírok egy lehetőséget, amellyel megkerülheti a mappák létrehozásának problémáját php használatával csökkentett módban.
Mappa létrehozásához PHP-ben van egy szabványos mkdir() függvény, de a legtöbb esetben haszontalannak bizonyul, és sokan tudnak róla, de kevesen tudják, hogy meg lehet kerülni ezt a problémát.
Minden nagyon egyszerű, mappákat kell létrehoznia a beépített segítségével php függvények FTP.
Az alábbiakban erről írok részletesebben.

Problémák az mkdir()-vel mappa létrehozásakor.
Mint tudod, ha engedélyezve van a php-ban biztonságos módban(safe_mode = be), akkor a mappák (könyvtárak) létrehozása az mkdir() segítségével nem fog működni. Pontosabban létrehozhatja, de a mappa további használata lehetetlen lesz. Ebbe a mappába nem fog tudni fájlokat feltölteni, átnevezni és törölni sem fog tudni, még akkor sem, ha FTP-n keresztül jelentkezik be (egyes esetekben FTP-n keresztül is törölhető).

A csökkentett mód alapértelmezés szerint minden szerveren és tárhelyszolgáltatón engedélyezve van. Ha nincs lehetősége a csökkentett mód letiltására, van egy másik kiút.

Mappák létrehozása php-ban FTP-vel.
Szinte minden szerveren és tárhelyen engedélyezve van az ftp támogatás a php-ben.
Ezen függvények segítségével megkerüljük az mkdir() mappa létrehozásának problémáját.
Példa egy mappa létrehozására FTP-n keresztül.

$conn_id = @ ftp_connect ("ftp.server.ru" , 21 , 5 ); // csatlakozik az FTP szerverhez
if($conn_id) // ha a kapcsolat sikeres volt a szerverrel, folytassa
{
$login_result = @ftp_login($conn_id, "user", "pass"); // adja meg bejelentkezési nevét és jelszavát az FTP-hez
if($bejelentkezési_eredmény) // ha a szerver elfogadta a bejelentkezési jelszót, lépj tovább
{
// most a passzív móddal kell játszani, be- vagy kikapcsolni (TRUE, FALSE)
// ha a további ftp függvények nem működnek megfelelően, próbálja meg módosítani ezt a paramétert (TRUE vagy FALE)
ftp_pasv($conn_id, TRUE); // ebben az esetben a passzív mód engedélyezve van
ftp_mkdir($conn_id, "1/2/3"); // és magát a mappa létrehozását
}
}
ftp_close($conn_id); // és zárja be az FTP-kapcsolatot
?>
Most nem egy nagy megjegyzés a kódhoz.
Az első sor az FTP szerverhez csatlakozik. Általában egy helyi FTP szerverhez való csatlakozáshoz elég a localhost megadása szerverként, de megadhatjuk a teljes címet is.
A passzív mód engedélyezése vagy letiltása az FTP-beállításoktól függ.

Mappa létrehozásakor legyen óvatos, a mappa az FTP bejelentkezési gyökérből jön létre. Vagyis az utak itt különböznek az utaktól fájlrendszerés a mappa az FTP-n keresztül látható módon jön létre.
Ha egy mappa létrehozásakor több mellékletet ad meg, mint a példámban "1/2/3", akkor ebben az esetben az összes hiányzó mappa létrejön. Ha nincs "1" mappa, akkor létrejön, és benne a "2" mappa, abban pedig a "3" mappa. Ha már léteznek köztes mappák, akkor csak a hiányzó mappák jönnek létre.
Mappa létrehozása előtt például átléphet egy mappába


És e funkció után létrehozhat egy mappát. Ha a mappa elérési útja „2/3”-ként van megadva perjel nélkül, akkor a mappa ahhoz a mappához viszonyítva jön létre, amelyben éppen tartózkodunk. Vagyis létrejön az "1/2/3" mappa


Ha egy mappa létrehozásakor perjelet (/1/2/3) ad meg, akkor a mappa az FTP gyökérből jön létre, függetlenül attól, hogy melyik mappába helyezte át.

Megjegyzések

2009.10.14. Szergej
minden ötletes egyszerű :)

2009.12.12. Victor
Köszönöm, minden működik, de az ftp kliensben nem látszanak azonnal a létrehozott mappák, újra kell indítani, pl. ne csak szakítsa meg a kapcsolatot a szerverrel és csatlakozzon újra, hanem zárja be a programot és futtassa újra (én FileZilla Client-et használok).

2009.12.14. Admin
Szerintem ennyi FTP kliensek gyorsítótár fájlok és mappák. Például a Total Commanderben van egy speciális „frissítés” gomb az ilyen ügyekre, kár, hogy a FileZillában nincs ilyen.

2010.01.24. Sándor
Hogyhogy a FileZillában nincs ilyen, nekem a 3.2.2-es verzióm van, az már kb egy éves és van ilyen funkció és amennyire emlékszem mindig is volt!!!

2010.08.27. Vitalij
A mappák a 755-tel a jobb oldalon jönnek létre, de 777-re van szükség.
A létrehozási szakaszban beállítható valahogy, hogy a mappa milyen jogokkal jön létre FTP-n keresztül?

2010.08.27. Admin
Vitalij, erre van egy funkció
ftp_chmod($conn_id, 0777, $file)
mappa vagy fájl létrehozása után használja

2010.08.28. Vitalij
köszönöm Admin!

2010.09.12. Andrey
Elnézést, miért nem hozok létre több könyvtárat, azaz:

2011.06.12. Ilja
Valami nem megy jól. A szerver problémái:
Figyelmeztetés: Az ftp_close() azt várja, hogy az 1. paraméter erőforrás, logikai érték a /home/bos/p/h/p/phpscripts/public_html/formf.php 19. sorban található.

2011.06.15. Viktor
Ilya, azt írja, hogy az első paraméter, amelyet az ftp_close függvénynek ad át, nem megfelelő

2011.06.29. Alekszej
Ugyanaz a probléma, mint Andrey
(több könyvtár nem jön létre)
ftp_mkdir ($conn_id, "1" // ez így működik);
de mint ez az ftp_mkdir ($conn_id, "1/2/3" // nem működik).
???

2011.07.27. Viktor
Alexey, furcsa, megnéztem, több mappát hoz létre nekem.
Lehet, hogy valami trükkös mód van engedélyezve a szerveren, akkor egyenként kell mappákat létrehozni, először létrehozni az 1-es mappát, majd beírni és létrehozni benne a 2-es mappát, majd beírni a 2-es mappát és létrehozni benne a 3-at...

2011.11.07. k1-801 (Dmitry lehetséges)
És mappákat törölni, amennyire értem, keresztül
rmdir_ftp($conn_id, $dir);
Így?

És mellesleg valamiért nem hoz létre mappát nekem (és nem ír ki hibákat... furcsa...)

2012.10.03. YA
Köszönöm, különben kínlódtam ezzel a kérdéssel.
és mindent megbocsátasz, és a legfontosabb, hogy működik

2012.05.29. Mihail
Természetesen sajnálom. Hová írjam ezt a kódot, különben egyáltalán nem értek hozzá, de tényleg létre kell hoznom egy mappát))

2012.04.07. Nomaq
Valami nem stimmel velem... első alkalommal kiugrik a kód, másodszor kiírja, hogy már létezik ilyen mappa... úgy tűnik, hogy készül, de az FTP újraindítása után sem látszik((((
és emellett létre kell hoznom egy mappát nem ugyanabban a mappában, ahol a PHP fájl van, hanem vissza kell lépnem egy lépést, majd be kell lépnem egy másik mappába, és ott létrehozni. Valami ilyesmi:
../mappa1/új mappa itt
kérlek segíts, ha nem nehéz) köszönöm)

2012.04.07. Nomaq
Kitaláltam a módokat))) általában köszönöm a cikket, ritka, hogy valaki megfelelően elmagyarázza, hogy hogyan)))

2013.01.27. CiliZ
Szép volt, tisztelet a cikknek

2013.06.05. Vaszilij
A vállalati mappa a fő elem vállalati identitás cégek. Kis mennyiségű dokumentumok és papíranyagok rögzítésére szolgáló termék. A mappákat cégen belül, dokumentumok tárolására és mozgatására, valamint reklámcélokra egyaránt használják. További részletek a weboldalon: www.logodesigner.ru/papki

címkék eltávolítása (12)

Számos olyan esettel találkoztam a Bluehost WordPress-telepítéseivel kapcsolatban, amikor hibákat észleltem a WordPress témámban, mert hiányzott a feltöltések wp-content/uploads mappa.

Nyilvánvalóan a Bluehost cPanel WP telepítője nem hozza létre ezt a mappát, bár a HostGator igen.

Tehát kódot kell hozzáadnom a témámhoz, amely ellenőrzi a mappát, és egyébként létrehozza azt.

Válaszok

Próbáld ki ezt:

If (!file_exists("könyvtár/útvonal")) ( mkdir("könyvtár/útvonal", 0777, igaz); )

Ne feledje, hogy a 0777 már az alapértelmezett mód a könyvtárakhoz, és az aktuális umask továbbra is megváltoztathatja.

A WordPressnek van egy nagyon praktikus wp_mkdir_p funkciója is, amely rekurzív módon létrehoz egy könyvtárstruktúrát.

Referencia forrása: -

Függvény wp_mkdir_p($target) ( $wrapper = null; // a protokoll eltávolítása if(wp_is_stream($target)) ( list($wrapper, $target) = explode("://", $target, 2); ) // innen: php.net/mkdir felhasználói megjegyzések $target = str_replace("//", "/", $target // a burkoló visszahelyezése a célpontra if($wrapper !== null) ( $target). ); = $ wrapper . if (üres($target)) $target = "/" " != $target_parent && ! is_dir($target_parent)) ( $target_parent = dirname($target_parent); ) // Szerezze be az engedélybiteket. if ($stat = @stat($target_parent)) ( $dir_perms = $stat[ "mode"] & 0007777 ) else ( $dir_perms = 0777; ) if (@mkdir($target, $dir_perms, true)) ( // Ha egy umask van beállítva, amely módosítja a $dir_perms értéket, akkor újra kell állítsa be helyesen a $dir_perms paramétert a chmod() paranccsal 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; }

for ($i = 1; $i

Ugyanez kell a bejelentkezési oldalhoz is. Létre kellett hoznom egy könyvtárat két változóval. A $ könyvtár az a főmappa, ahol egy másik almappát akartam létrehozni a felhasználói licencszámmal.

Include_once(../include/session.php"); $lnum = $munkamenet->lnum; //Felhasználói licenc száma a munkamenetekből $könyvtár = feltöltött_címkék; // A mappa létrehozása alatt álló könyvtár neve if (!file_exists($directory."/".$lnum)) ( mkdir($directory."/".$lnum, 0777, true); )

Valami általánosabb, ahogy a google-n megjelenik. Míg a részletek konkrétabbak, a kérdés címe általánosabb.

/** * rekurzívan hozzon létre egy hosszú könyvtárútvonalat */ függvény createPath($path) ( if (is_dir($path)) return true; $prev_path = substr($path, 0, strrpos($path, "/", - 2) + 1);

Javítható egy leállítási szint biztosításával, így egyszerűen meghibásodik, ha kívülre kerül a felhasználó mappáján vagy valamin, és engedélyezi az engedélyeket.

Mappa létrehozása, ha még nem létezik

A környezetvédelmi kérdés mérlegelése.

  • WordPress.
  • Web hosting szerver.
  • Feltéve, hogy a Linuxon nem fut a PHP.

bool mkdir(string $elérési út[, int $mód=0777[, bool $recursive=FALSE[, erőforrás$kontextus]]])

A kézikönyv szerint az egyetlen kötelező paraméter a $pathname !

így egyszerűen kódolhatjuk:

Magyarázat:

Nem kell semmilyen paramétert átadnunk, és nem kell ellenőriznünk, hogy létezik-e a mappa, sőt, ha szükséges, még az átviteli mód paraméterét sem; a következő okok miatt:

  • A parancs létrehoz egy mappát, amelynek engedélye 0755 (a nyilvános mappa alapértelmezett engedélye) vagy 0777, amely a parancs alapértelmezett engedélye.
  • mód figyelmen kívül hagyva PHP-t futtató Windows gazdagép .
  • Az mkdir parancs beépített ellenőrzővel rendelkezik, ha a mappa létezik; így csak azt kell ellenőriznünk, hogy a True | Hamis; és ez nem hiba, csak figyelmeztetés, és a figyelmeztetés alapértelmezés szerint le van tiltva a hosting szervereken.
  • Sebességtől függően gyorsabb, ha a figyelmeztetés ki van kapcsolva.

Ez egy másik módja annak, hogy megvizsgáljuk a kérdést, és ne a legjobb vagy optimális megoldást keressük.

Tesztelve PHP7-en, Production Serveren, Linuxon

Kipróbálhatod még:

$dirpath = "útvonal/könyvtár"; $mode = "0777"; is_dir($dirpath) || mkdir($dirpath, $mode, true);

If (!is_dir("elérési_könyvtár")) ( @mkdir("elérési_könyvtár"); )

A mappa létrehozásának gyorsabb módja:

If (!is_dir("könyvtár/útvonal")) ( mkdir("könyvtár/útvonal", 0777, igaz); )

megteszed

Printf("Szia %s!
", $név);

telepítés előtt sütiket, ami tilos. A fejlécek előtt nem küldhet adatot, még üres sort sem.

A PHP-nek egyetlen funkciója van - az mkdir(), amely lehetővé teszi könyvtárak létrehozását a webhely szerverén, amelyek néha annyira szükségesek a háztartásban. Például egy új anyag létrehozásakor létre kell hozni egy mappát, ahová ismét a CMS segítségével feltöltheti az összes szükséges fájlt.

Mkdir("/útvonal/a/saját/könyvtárhoz", 0700);

Azok. egy bizonyos könyvtárban hozunk létre egy új mappát, és például a módot 0700-ra állítjuk, például, hogy fájlokat tudjunk írni a mappába, módosítjuk a módot 0777-re.

De itt adódik az mkdir() probléma. Amikor ezt teszi php szkript ha a safe_mode szerver funkció engedélyezve van, a tulajdonos (UID) be van jelölve, és ha a szkript és a mappa tulajdonosa nem egyezik, akkor előfordulhat, hogy nem tud például fájlt írni a létrehozott könyvtárba, törölni egy fájlt, vagy például FTP-n keresztül magát a mappát nem tudja törölni.

De van egy elegánsabb megoldás is erre a problémára, anélkül, hogy meg kellene kérnie a tárhelyszolgáltatót, hogy tiltsa le a safe_mode funkciót (ez a funkció alapértelmezés szerint az összes tárhelyen engedélyezve van a biztonság érdekében). Alapvetően a fizetős tárhelyszolgáltatások is biztosítanak hozzáférést az ftp-hez, és mi ebből indulunk ki.

$conn_ftp = @ftp_connect("saját_ftp_szerver", 21, 5);

A függvény első változója az ftp-szerver címe, a második az a port, amelyen csatlakozik az ftp-hez, az utolsó pedig az engedélyezett kapcsolódási időtúllépés. Egy kicsit az időtúllépésről, ez szükséges a későbbi hálózati műveletekhez, ha nem adja meg, akkor az alapértelmezett érték 90 másodperc. A csatlakozás után ellenőrizzük, hogy sikeres volt-e, és elküldjük a bejelentkezési nevet és a jelszót:

If($conn_ftp) // a csatlakozás sikeres volt ( $login_result = @ftp_login($conn_ftp, "user", "pass"); // írja be az FTP bejelentkezési nevét és jelszavát if($login_result) // a bejelentkezés és a jelszó ellenőrzése sikeres siker(ftp_pasv($conn_ftp, TRUE);))

A bejelentkezési név és a jelszó ellenőrzése után döntenünk kell a passzív mód mellett, és azt IGAZ vagy FALSE értékre kell állítani - ez akkor szükséges, ha további FTP funkciók nem működnek megfelelően. Most a passzív mód meghatározása után létrehozhatjuk a mappáinkat, leírom az összes olyan funkciót, ami a jövőben hasznos lehet:

$file = ftp_mkdir($conn_ftp, "public_html/materials/345"); //A 345-ös könyvtár létrehozása az anyagok mappában, ha az anyagok mappa nem létezik, //az is létrejön, ugyanígy a public_html mappával (ez a //könyvtár azért van feltüntetve, hogy a teljes elérési utat láthassa, különben csak egy mappa webhelytel) ftp_chdir($conn_ftp, "public_html/materials"); //Ha biztosan van anyagok mappája, akkor nem kell a teljes //útvonalat beírnia, először csak rá kell lépnie, majd létrehozhat benne egy 345-ös mappát a //a következő kóddal: ftp_mkdir ($conn_ftp, "345") ftp_chmod($ conn_ftp, 0777, $fájl); //Alapértelmezés szerint minden mappa 0755 móddal jön létre, ezzel a paranccsal //ezt 0777-re változtatja, amivel fájlokat adhat hozzá a létrehozott mappához.

Most adok egy teljes példát a működő kódra, így láthatja, hogyan néz ki az egész, például az enyém:

$dir_name = time(); //Itt létrehozom a mappa nevét a szkript indításának időpontja alapján $conn_ftp = @ftp_connect("your_ftp_server", 21, 5); if($conn_ftp) // a csatlakozás sikeres volt ( $login_result = @ftp_login($conn_ftp, "user", "pass"); // írja be az FTP bejelentkezési nevét és jelszavát if($login_result) // a bejelentkezés és a jelszó ellenőrzése sikeres siker ( 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); ) )

Érdemes egy kicsit szólni a könyvtárak meghatározásáról is, ha az elején perjelet adunk meg, akkor a mappa az ftp gyökérhez viszonyítva jön létre. Amikor FTP-kiszolgálóhoz csatlakozik, mindig a gyökérhez csatlakozik, ezért ezt tartsa szem előtt.