Често, когато създавате програма, става необходимо да изтриете файлове (причините могат да бъдат много различни) и в този случай unlink php ни идва на помощ. Днес ще научим как да изтриваме файлове в PHP и ще разгледаме някои примери.

Изтрийте файлове с PHP за премахване на връзката

Функцията unlink() се използва за изтриване на файлове. Синтаксисът за тази функция е:

прекратяване на връзката (име на файл)

Тази функция е булева и следователно връща TRUE при успешно изтриване на файла и FALSE при неуспех. Помислете за използване прекратяване на връзката ()Например:

Трябва да се отбележи, че при презареждане на тази страница програмата ще генерира грешка. Това се дължи на факта, че при първото извикване на функцията тя вече е изтрила файла и следващия път не може да го намери.

Има няколко начина за решаване на този проблем. Например, можете да използвате по-сложна вътрешна програмна архитектура, като използвате условни изявленияако . Или просто поставете символа @ пред самата функция, за да игнорирате възникващите грешки. В този случай, дори ако файлът не бъде намерен, няма да се появи грешка:

Изтриването на файлове в PHP с помощта на unlink не е никак трудно, както се казва, счупването не е изграждане. Следващият път ще научим как да проверяваме състоянието на файловете.

PHP е език за програмиране, използван предимно за създаване на динамични уеб страници. Както всеки друг език за програмиране, PHP съдържа много функции, сред които има много полезни. Например възможността за изтриване на файл, който можете да използвате във вашите скриптове.

Този съвет ще ви помогне да научите как изтриване на файл в phpизползване на функцията прекратете връзката.

Инструкция стъпка по стъпка:

За да изтриете файл в PHP, можете да използвате функцията прекратете връзката. Използвайки примера на прост скрипт, нека анализираме работата прекратете връзката:

  1. Създавайте текстов файлв текстов редактор(vi/vim, nano, gedit или просто стандартен Notepad).
  2. Въведете или просто копирайте следния код в него:$file="example.log";
    прекратяване на връзката ($файл);
    ?>
  3. Запазете (например под името testunlink.php) и поставете генерирания скрипт файл на вашия тестов уеб сървър. В същата директория създайте файл example.log с произволно съдържание. Това е, което ще премахнем.
  4. Стартирайте скрипта, като го извикате в браузъра, и когато погледнете отново в директорията, ще откриете, че файлът example.log вече не е там. Прекратете връзкатаси свърши работата!

Как работи всичко:

Първият ред от кода на скрипта: ние определяме типа на нашия скрипт.

Втори ред от код: След стартиране на скрипта, който създадохме, на променливата на файла ще бъде присвоена стойността example.log(имайте предвид, че файлът със същото име трябва да присъства в същата директория като скрипта, който създадохме. Просто го създайте с произволно съдържание!).

Трети ред от код: Изтрийте файла example.log, като го предадете като аргумент на функцията за премахване на връзката.

Четвърти ред от кода на скрипта: край на php кода.

Нека се опитаме да разрешим проста задача за изтриване на един или няколко файла с помощта на PHP. Като цяло тук няма нищо сложно, но има много подробности, както и решения, за които трябва да знаете. В моята статия не се ангажирам да прегърна необятността, но мисля, че мога да обясня няколко въпроса и да дам няколко примера. Ще започваме ли?

Функция PHP unlink().

И ще започна с unlink() php функцията, която премахва файла:

bool прекратете връзката(низ$filename[, ресурс$контекст])

Тук $filename е пътят до файла, а $context (по избор) е описание на контексти за работа с потоци (поддържа се в PHP от 5.0.0). Функцията връща TRUE при успех или FALSE при грешка.

Пример за използване на unlink() php функцията:

$filename = "./path/to/file.txt";

Защо тази функция се нарича unlink()?

Това е така, защото файловата система Unix прави разлика между физическото местоположение на файловете на носителя и съответната структура на директорията. Така че, когато записвате файл в определен момент файлова систематази точка в дървото на директорията е свързана с физическото местоположение, където се съхраняват данните на файла. С други думи, пътят на Unix файл всъщност е уникален идентификатор за един от тези възли.

Също така трябва да се отбележи, че в Unix е възможно да се асоциират няколко такива точки с едни и същи данни. Такива данни ще съществуват, докато има поне една връзка към тях. Но ако всички връзки бъдат унищожени, тогава и самите данни ще бъдат унищожени. По този начин функцията unlink() е предназначена да премахва връзки и вече като следствие от данните на файла.

В Windows няма такова нещо и функцията unlink() изтрива файла. Освен това, някои версии на PHP на Windows изобщо не поддържат unlink(). В този случай командата del се използва чрез system() или exec(), например:

$filename = "/2014/04/file.txt";
if (isset($_ENV["WINDIR"])) (
@exec("del ". $filename);
if (file_exists($filename)) die("Грешка при изтриване на файл.");
) иначе ако (!(@unlink($filename))) (
die("Грешка при изтриване на файл.");
}

В този случай променливата на средата $_ENV["WINDIR"] може да служи като маркеризползвайки платформата Windows, а проверката дали файлът е изтрит става чрез php-функцията file_exists(), която проверява съществуването на файла.

Как да изтрия файл(ове) в PHP?

В някои случаи може да се случи функцията unlink() да няма достъп до изтриване на файла, т.е. получаваме грешка : разрешението е отказано. Това може да се дължи на неправилно посочен път до файла или липса на права за достъп.

Интересен вариант за работа с файлови пътища е използването на php функциите getcwd(). (получава името на текущата работна директория)и chdir() (променя текущата директория на посочената), например:

$file_path = "път/до";
$file_name = "/2014/04/file.txt";
$old = getcwd();
if (!(@chdir($file_path))) die("Грешка отворен път.");
if (!(@unlink($file_name))) die("Грешка при изтриване на файл.");
chdir($стар);

Както можете да видите, по-лесно е да навигирате и да проследите проблема по някакъв начин. В същото време няма да е излишно да се върнете към текущата $old директория след извършване на изтриването.

Що се отнася до проблемите с достъпа, тук можете да опитате да използвате php-функцията chmod () (променя режима на достъп до файлове), например:

$filename = "/2014/04/path/to/file.txt";
@chmod($filename, 0666);
if (!(@unlink($filename))) die("Грешка при изтриване на файл.");

Ако се нуждаеш изтриване на всички файлове в директорияудобно е да се използва комбинация от array_map() php функции (прилага функция за обратно извикване към всички елементи на масива)и glob() (намира файлови пътища, които съответстват на шаблон), например:

array_map("прекратяване на връзката", glob("някои/dir/*.txt"));

Решаване на проблема с многопоточността при изтриване на файлове

Много по-трудно, когато става въпрос за големи сайтове, където има голям брой едновременни заявки (нишки) към скрипта. Тук има няколко решения. Ще дам само един от тях, основният е да се използва семафори.

Като такъв, семафорслужи като вид маркерпроцес. Когато семафор се придобие от един процес, стойността му се намалява с единица, а когато се освободи, се увеличава с единица. В този случай, ако текущата стойност на семафора е нула, процесът няма да може да го улови и ще изчака семафора да бъде освободен.

Функцията sem_get() се използва за получаване на ресурса на семафора. Една функция може да получи семафор със стойност, различна от единица, и след това множество нишки могат да уловят семафора. Функцията sem_acquire() се използва за улавяне. Пример:

$sem = sem_get(1);
if (sem_acquire($sem) && file_exists($filename)) @unlink($filename);
sem_remove($sem);

Имайте предвид, че тук се използва допълнителна проверка за съществуването на файла file_exists(). Въпросът е, че когато първата нишка придобие семафора, изтрие файла и освободи семафора, втората нишка може да продължи изпълнението, без да изтрива файла, който вече не съществува.

Важна роля тук играе функцията sem_remove(), която освобождава заетия семафор. Ако семафорът не бъде освободен, тогава паралелната нишка ще остане в състояние на изчакване до края на текущата. Следователно функцията трябва да е извън условието.

Това е всичко за мен. Надявам се, че моята статия е била полезна за вас или просто информативна. Благодаря за вниманието. Късмет!

в 8:00 часа Редактиране на съобщение

Продължаваме урока, който е посветен на темата " Работа с PHP файлове". Ако не сте чели предишното, препоръчвам да го прочетете, а тези, които са го чели, да продължат напред. В този урок ще научите как да изтриете създаден или съществуващ файл с използвайки PHP, копиране или преименуване, заключване на файла.
Е, ако си готов, тръгвай на битка...

Изтриване на файл в PHP

Ако трябва да премахнете файл, използвайте функцията unlink() на PHP:

прекратяване на връзката (име на файл);

Име на файл - Въведете тук името на файла, който искате да изтриете.

Да кажем, че трябва да изтрием файла " file.txt", пример за попълване ще бъде така:

Unlink("file.txt");

Завършен код:

Ако файлът "file.txt" присъства, неговият скрипт се премахва.

Копиране на файл в PHP

Ако трябва да копирате съдържание от един файл в друг файл, използвайте функцията copy() на PHP.

Копиране ("файл1", "файл2");

File1 - името на файла, от който ще се копира текста
- файл2 - името на файла, в който ще се копира текста

Например създайте файл с име "file2.txt" на локалния сървър в папката "test-1". Нека файлът е празен. Сега поставете този код копиране ("файл.txt", "файл2.txt");в php код "file.php":

какво направихме Създадох файл, наречен „file.txt“ чрез PHP, направих запис във файла „file.txt“ чрез PHP „ Радвам се да те видя в сайта на блога ", показва резултата в браузъра, копира текста от файла" file.txt "И го поставя във файла" file2.txt». Не вярвате, че това се е случило? Спомняте ли си, че файлът "file2.txt" беше празен?! Отвори го! И какво виждате? Да, точно така, текстът, който беше във файла "file.txt":

Преименуване на файл в PHP

За да преименувате файл, използвайте PHP функцията rename():

Преименуване ("файл1", "файл2");

File1 е името на файла, който ще бъде заменен ( преименувам)
- file2 - тук трябва да дадете ново име на файл

Ето пример за попълване:

Преименуване("файл2..txt");

Тук завършен код:

Файлът "file2.txt"Преименуван на файл"site.txt".

Мисля, че това трябва да завърши нашия урок. Но това не е всичко, в следващия урок ще продължим да работим с файлове.