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: