Ako odstrániť súbor php, ktorý nie je odstránený. Ako odstrániť súbor v PHP? Prečo sa táto funkcia nazýva unlink()

pred 8 rokmi

Odstránili ste veľký súbor, ale nezaznamenali ste žiadne zvýšenie voľného miesta ani zníženie využitia disku? Používate UNIX alebo iný OS POSIX?

Unlink() nie je o odstránení súboru, ale o odstránení názvu súboru. Manuálová stránka hovorí: ``unlink - vymazať meno a prípadne súbor, na ktorý odkazuje"".

Väčšinu času má súbor len jeden názov -- jeho odstránením tiež odstránite (uvoľníte, uvoľníte) „telo" súboru (s jedným upozornením, pozri nižšie). To je jednoduchý, bežný prípad.

Avšak "je úplne v poriadku, ak má súbor niekoľko mien (pozri funkciu link()) v rovnakých alebo rôznych adresároch. Všetky názvy budú odkazovať na telo súboru a "udržať ho pri živote". Až po odstránení všetkých mien sa telo súboru skutočne uvoľní.

Upozornenie:
Telo súboru môže *tiež* „udržať pri živote“ (stále s využitím miesta na disku) procesom, ktorý drží súbor otvorený. Telo nebude uvoľnené (neuvoľní miesto na disku), pokiaľ ho bude proces udržiavať otvorený. V skutočnosti existuje fantastický spôsob, ako vzkriesiť súbor odstránený omylom, ale stále otvorený procesom...

pred 10 rokmi

Pracoval som na malom teste, kde sa pred úpravou hlavného textového súboru vytvoril záložný súbor. Keď potom dôjde k chybe, hlavný súbor sa odstráni (odpojí) a namiesto toho sa vráti záložný súbor.

Aj keď som si asi hodinu lámal hlavu nad tým, prečo som nemohol získať právo na odpojenie hlavného súboru.

Konečne som vedel, čo je zle: keďže som na súbore pracoval a ešte som ho nezatvoril, stále sa používal a samozrejme sa nedal vymazať:)

Tak som si myslel, že to tu napíšem, aby som predišiel ostatným, aby urobili rovnakú chybu:

// Najprv zatvorte súbor
fclose($fp);

// Potom odpojiť :)
odpojiť ($somefile);
?>

pred 14 rokmi

Ak chcete vymazať všetky súbory určitej prípony, alebo v skutočnosti vymazať všetky so zástupným znakom, oveľa jednoduchým spôsobom je použiť funkciu glob. Povedz, že som chcel vymazať všetky jpg......

Foreach (glob ("*.jpg" ) ako $filename ) (
echo " $ veľkosť súboru " . veľkosť súboru ($filename) . "\n" ;
odpojiť ($filename);
}

?>

pred 10 rokmi

Každému, kto má problém s chybou odmietnutia oprávnení, je to niekedy spôsobené, keď sa pokúsite odstrániť súbor, ktorý sa nachádza v priečinku vyššie v hierarchii vášho pracovného adresára (t. j. pri pokuse o odstránenie cesty, ktorá začína s "../").

Ak chcete tento problém obísť, môžete použiť chdir() na zmenu pracovného adresára na priečinok, v ktorom sa nachádza súbor, ktorý chcete zrušiť.

$starý = getcwd(); // Uloženie aktuálneho adresára
chdir($cesta_k_suboru);
odpojiť ($filename);
chdir ($starý); // Obnovte starý pracovný adresár
?>

pred 4 rokmi

V OSX, keď bojujete s chybou "Permission Denied" (Povolenie odmietnuté), uistite sa, že adresár má oprávnenia ZÁPIS pre spusteného php-user.

Okrem toho, ak sa spoliehate na zoznamy prístupových práv a chcete odstrániť súbor alebo symbolický odkaz, adresár, ktorý obsahuje, musí mať povolenie „delete_child“, aby bolo možné odpojiť veci vo vnútri. Ak pridelíte „delete“ iba priečinku, umožní vám to odstrániť samotný priečinok kontajnera, ale nie objekty vo vnútri.

pred 4 rokmi

Môže sa to zdať samozrejmé, no trhal som si s týmto problémom vlasy – uistite sa, že súbor, ktorý sa pokúšate odstrániť, sa momentálne nepoužíva. Mal som skript, ktorý analyzoval textový súbor a mal ho po dokončení vymazať, ale stále sa mi zobrazovala chyba odmietnutia povolenia, pretože som súbor explicitne neuzavrel, a preto sa technicky stále „používal“, aj keď analýza bola kompletný.

pred 11 rokmi

Príspevok Ggarciaa vyššie už má jednu malú chybu, musí sa použiť closedir, aj keď je $DeleteMe nepravdivé











}

Closedir($dh);
if ($DeleteMe )(
@rmdir($dir);
}
}

?>

pred 9 mesiacmi

Spracovanie chyby „Resource Unavailable“ pomocou unlink() ako výnimky pomocou try catch

Dokonca aj is_file() alebo file_exists() skontroluje, či súbor existuje alebo nie, existuje šanca, že súbor používajú niektoré aplikácie, ktoré zabránia vymazaniu a unlink() zobrazí chybu „Resource Unavailable“.

Takže po vyskúšaní mnohých metód, ako sú: `is_resource()`, `is_writable()`, `stream_get_meta_data()`...atď, som dospel k jedinému najlepšiemu spôsobu, ako zvládnuť chybu pri *"odstránení"* súboru, ktorý je buď * *neexistuje** alebo **je existuje, ale používa ho nejaká aplikácia**

funkcia delete_file($pFilename)
{
if (file_exists($pFilename)) (
// Pridal muhammad.begawala
// "@" prestane zobrazovať chybu "Resource Unavailable", pretože súbor je niekde otvorený.
// "unlink($pFilename) !== true" skontroluje, či bol súbor úspešne odstránený.
// Vyvolanie výnimky, aby sme mohli chybu jednoducho zvládnuť namiesto zobrazovania používateľom.
if(@unlink($pFilename) !== true)
throw new Exception("Nepodarilo sa odstrániť súbor: " . $pFilename . " Zatvorte všetky aplikácie, ktoré ho používajú.");
}
vrátiť true;
}

/* === POUŽITIE === */

skús (
if(delete_file("hello_world.xlsx") === true)
echo "Súbor vymazaný";
}
chytiť (Výnimka $e) (
echo $e->getMessage(); // vypíše správu o výnimke definovanú vyššie.
}

pred 11 rokmi

Príspevok Ggarciaa vyššie má jednu malú chybu, bude ignorovať reťazce súborov a adresárov, ktoré sú vyhodnotené ako nepravdivé (tj "0")

Opravený kód je uvedený nižšie (false !==)

// ggarciaa zavináč gmail bodka com (4. júl 2007 1:57)
// Potreboval som vyprázdniť adresár, ale ponechať si ho
// tak som mierne upravil prispevok z
// stefano at takys dot it (28.12.2005 11:57)
// Krátka, ale výkonná rekurzívna funkcia
// funguje to aj vtedy, ak adresár obsahuje skryté súbory
// $dir = cieľový adresár
// $DeleteMe = ak je true, zmaže aj $dir, ak je false, nechaj to tak

Funkcia SureRemoveDir ($dir, $DeleteMe) (
if(! $dh = @ opendir ($dir )) return;
while (false !== ($obj = readdir ($dh ))) (
if($obj == "." || $obj == ".." ) pokračovať;
if (!@ unlink ($dir . "/" . $obj )) SureRemoveDir ($dir . "/" . $obj , true );
}
if ($DeleteMe )(
closedir($dh);
@rmdir($dir);
}
}

//SureRemoveDir("EmptyMe", false);
//SureRemoveDir("RemoveMe", true);

?>

pred 8 rokmi

Odpojenie môže zlyhať po použití príkazov ODBC v súbore (v systéme Windows).

Ani jednoaniurobil trik.

Ibauvoľnil súbor tak, aby ho bolo možné neskôr odstrániť ...

Pokračujeme v lekcii, ktorá je venovaná téme „ Práca so súbormi PHP" Ak ste nečítali predchádzajúcu, odporúčam si ju prečítať a tí, ktorí ju čítali, poďme ďalej. V tejto lekcii sa naučíte, ako odstrániť vytvorený alebo existujúci súbor pomocou PHP, skopírovať alebo premenovať, uzamknúť súbor.
No, ak ste pripravení, choďte do boja...

Odstránenie súboru v PHP

Ak potrebujete odstrániť akýkoľvek súbor, použite funkciu PHP unlink():

Unlink(názov súboru);

Názov súboru – tu zadajte názov súboru, ktorý chcete odstrániť.

Povedzme, že potrebujeme odstrániť súbor „file.txt“, príklad na vyplnenie by bol takýto:

Unlink("file.txt");

Pripravený kód:

Ak bol prítomný súbor "file.txt", skript ho vymazal.

Kopírovanie súboru v PHP

Ak potrebujete skopírovať obsah z jedného súboru do druhého, použite funkciu PHP copy().

Copy("file1", "file2");

Súbor1 – názov súboru, z ktorého sa text skopíruje
- súbor2 – názov súboru, do ktorého sa text skopíruje

Napríklad vytvorte súbor s názvom „file2.txt“ na vašom lokálnom serveri v priečinku „test-1“. Nechajte súbor prázdny. Teraz prilepíme tento kód copy("subor.txt", "subor2.txt"); v php kód „file.php“:

čo sme urobili? Vytvoril súbor s názvom „file.txt“ cez PHP, urobil záznam do súboru „file.txt“ cez PHP „ Som rád, že vás vidím na stránke blogu “, zobrazil výsledok v prehliadači, skopíroval text zo súboru „súbor.txt“ a vložil ho do súboru „súbor2.txt“. Neveríte, že sa to stalo? Pamätáte si, že súbor “file2.txt” bol prázdny?! Otvor to! a čo vidíš? Áno, je to tak, text, ktorý bol v súbore „file.txt“:

Premenovanie súboru v PHP

Ak chcete premenovať súbor, použite funkciu PHP rename():

Premenovať("súbor1", "súbor2");

File1 – názov súboru, ktorý je potrebné nahradiť ( premenovať)
- súbor2 – tu musíte zadať nový názov súboru

Tu je príklad na vyplnenie:

Rename("file2..txt");

Tu je hotový kód:

Súbor „file2.txt“ bol premenovaný na súbor „site.txt“.

Tu si myslím, že by sme mali našu lekciu ukončiť. To však nie je všetko, v ďalšej lekcii budeme pokračovať v práci so súbormi.

V predchádzajúcom článku sme o tom hovorili a tam som vám predstavil funkcia rmdir(), ktorý vymaže adresár. Povedal som však, že týmto spôsobom môžete odstrániť iba prázdny adresár, ale ako odstrániť adresár so súbormi, To sa dozviete teraz.

Princíp je veľmi jednoduchý: do odstrániť adresár so súbormi, musíte najskôr vymazať všetky súbory, ako aj všetky podadresáre. V podadresároch môžu byť aj súbory a iné podadresáre, ktoré je tiež potrebné vyčistiť. Vo všeobecnosti je problém v tom, že hĺbka adresárov môže byť veľmi veľká. A je zrejmé, že rekurzia sa navrhuje sama - volanie funkcie v sebe.

Napriek zjavnej zložitosti algoritmu je implementácia veľmi jednoduchá a transparentná:

function removeDirectory($dir) (
if ($objs = glob($dir."/*")) (
foreach($objs ako $obj) (
is_dir($obj) ? removeDirectory($obj) : unlink($obj);
}
}
rmdir($dir);
}
?>

Pokúsim sa vysvetliť jasným jazykom algoritmus tejto funkcie. V prvom rade dostaneme zoznam všetkých súborov v danom adresári. Ak tam nie sú, okamžite to odstráňte. Ak existujú, potom ich začneme triediť jeden po druhom. Ak je prvkom súbor, jednoducho ho odstráňte ( odpojiť ($obj)). Ak je toto adresár, potom znova zavoláme našu funkciu a prejdeme tento adresár. Toto je rekurzia: funkcia volá sama seba. Po zavolaní funkcie sa všetko spustí odznova, ale s iným adresárom. Všetky jeho súbory sú tiež odstránené a všetky jeho adresáre sú odoslané späť do tejto funkcie. Po odstránení všetkých adresárov a súborov sa vymaže už prázdny adresár.

Poviem vám, že tento algoritmus nie je z praktického hľadiska taký užitočný (nie je tak často potrebný odstrániť adresáre so súbormi v PHP), nakoľko je to užitočné pre rozvoj vášho myslenia. Toto je veľmi jednoduchý algoritmus a rieši veľmi, veľmi zložitý problém. Naučte sa preto skladať algoritmy - to je najdôležitejšia vec v akomkoľvek programovacom jazyku.

PHP je programovací jazyk, ktorý sa primárne používa na vytváranie dynamických webových stránok. Rovnako ako každý iný programovací jazyk, aj PHP obsahuje množstvo funkcií, vrátane mnohých užitočných. Napríklad možnosť vymazať súbor, čo môžete použiť vo svojich skriptoch.

Tento tip vám pomôže naučiť sa, ako na to odstrániť súbor v PHP pomocou funkcie odpojiť.

Pokyny krok za krokom:

Ak chcete odstrániť súbor v PHP, môžete použiť funkciu odpojiť. Pomocou jednoduchého skriptu ako príkladu sa pozrime, ako to funguje odpojiť:

  1. Vytvorte textový súbor v textovom editore (vi/vim, nano, gedit alebo len štandardný Poznámkový blok).
  2. Zadajte alebo jednoducho skopírujte nasledujúci kód:$file="example.log";
    unlink($file);
    ?>
  3. Uložte (napríklad pod názvom testnlink.php) a vytvorený súbor skriptu umiestnite na svoj testovací webový server. V tom istom adresári vytvorte súbor example.log s ľubovoľným obsahom. Toto vymažeme.
  4. Spustite skript tak, že ho zavoláte vo svojom prehliadači, a keď sa znova pozriete do adresára, zistíte, že súbor example.log tam už nie je. Odpojiť urobil trik!

Ako to celé funguje:

Prvý riadok kódu skriptu: určujeme typ nášho skriptu.

Druhý riadok kódu: Po spustení skriptu, ktorý sme vytvorili, bude premennej súboru priradená hodnota example.log(všimnite si, že súbor s rovnakým názvom musí byť prítomný v rovnakom adresári ako skript, ktorý sme vytvorili. Stačí ho vytvoriť s ľubovoľným obsahom!).

Tretí riadok kódu: Odstráňte súbor example.log jeho odovzdaním ako argument funkcii unlink.

Štvrtý riadok kódu skriptu: koniec kódu php.