Werken met het bestandssysteem. Werken met bestanden in PHP. Een bestand lezen, naar een bestand schrijven. PHP-tutorial. Bestanden verwijderen, chmod wijzigen, met mappen werken. C

In feite is het openen van een php-bestand geen groot probleem. Het kan lastiger zijn om een ​​flesje bier open te trekken als je midden in een bos staat. Maar alleen fanatieke programmeurs denken zo. En voor beginners vertellen we je over alle mogelijkheden van PHP voor het werken met bestanden:

php-bestanden

Bestanden met de php-extensie bevatten code die is geschreven in de gelijknamige programmeertaal. In tegenstelling tot andere talen is PHP een programmeertaal aan de serverzijde. Dat wil zeggen, het draait aan de serverzijde. Om de code te kunnen debuggen, moet er daarom een ​​lokale server op de clientcomputer worden geïnstalleerd.

Om met php-bestanden te werken, worden speciale applicaties gebruikt: software-editors. De meest voorkomende zijn:

  • Droomwever.
  • PHPBewerken.
  • Eclipse PHP-ontwikkeling.


Wanneer u websites maakt op basis van PHP, moet u mogelijk programmacode hergebruiken. In dergelijke situaties is het handig om kant-en-klare oplossingen in een ander bestand aan te sluiten. Hiervoor wordt het include-construct gebruikt. De syntaxis is:

bestandsnaam bevatten

Aansluitvoorbeeld:

Inbegrepen bestand:


Het toevoegen van een bestand is ook mogelijk met behulp van de require-constructie. In tegenstelling tot include bevat het het bestand voordat de programmacode wordt uitgevoerd. Als u require in de code gebruikt, is slechts één aanroep naar dit bestand mogelijk. Wanneer het systeem opnieuw wordt benaderd, wordt een algemeen foutbericht weergegeven en wordt de uitvoering van het programma stopgezet.

De include-constructie omvat alleen de broncode tijdens de uitvoering van het programma. Het ondersteunt meerdere lezingen van het php-bestand. Als er een fout optreedt, wordt alleen een waarschuwingsbericht weergegeven en wordt de uitvoering van de code voortgezet vanaf de volgende regel.



Bestanden openen en sluiten

In php worden alle bewerkingen met bestanden in verschillende fasen uitgevoerd:

  • Een bestand openen;
  • Inhoud bewerken;
  • Het bestand sluiten.

De functie fopen() wordt gebruikt om een ​​bestand te openen. De syntaxis is:

int fopen(string bestandsnaam, stringmodus [, int use_include_path])

Geaccepteerde argumenten:

  • string bestandsnaam – bestandsnaam of absoluut pad ernaartoe. Als het pad naar het bestand niet is opgegeven, wordt er in de huidige map gezocht. Als het bestand dat u zoekt ontbreekt, geeft het systeem een ​​foutmelding. Voorbeeld:


  • stringmodus – geeft de bestandsopeningsmodus aan. Waarden geaccepteerd door het argument:
  • r – het bestand wordt alleen geopend om te lezen, de bestandsaanwijzer wordt aan het begin geplaatst;
  • r+ – bestand is geopend voor lezen en schrijven;
  • w – maakt een nieuw bestand aan dat alleen bedoeld is om te schrijven. Als er al een bestand met dezelfde naam bestaat, worden alle gegevens daarin automatisch verwijderd;
  • w+ - maakt een nieuw bestand aan voor schrijven en lezen. Als zo'n bestand bestaat, worden de gegevens ervan volledig overschreven door nieuwe;
  • a – het bestand is open voor schrijven. De wijzer wordt aan het einde geplaatst. Dat wil zeggen dat het schrijven naar het php-bestand niet vanaf het begin begint, maar vanaf het einde;
  • a+ – open een bestand in de lees-schrijfmodus. De opname begint vanaf het einde;
  • b – manier van werken met een bestand dat binaire gegevens bevat (in het binaire getalsysteem). Deze modus is alleen beschikbaar op het Windows-besturingssysteem.

Om de toegang tot een bestand te sluiten, gebruikt u de functie fclose(). Syntaxis:

int fclose (int file) , waarbij int file een handvat is om de site te sluiten.

Na elke lees- of schrijfactie moet het bestand met deze functie worden gesloten. Anders blijft de stream die voor het bestand is gemaakt open. En dit leidt tot onnodig verbruik van servercapaciteit.

Voorbeeld:

Bestanden lezen en schrijven

Om eenvoudig de volledige inhoud van een bestand weer te geven, is de functie readfile() ideaal. De syntaxis is:

readfile (string bestandsnaam), waarbij string bestandsnaam de naam van het stringbestand is (geen handle).


int fpassthru (int-bestand)

De functie vereist het openen en sluiten van een bestand. Voorbeeld:

Het resultaat is vergelijkbaar met het vorige.

Met functies voor het werken met bestanden in php kunt u de inhoud regel voor regel en teken voor teken lezen:

  • string fgets (int-bestand, int-lengte)– de functie leest een string met lengte lengte . Voorbeeld:


  • string fread (int-bestand, int-lengte)– de actie is identiek aan de vorige.

Om tekstgegevens naar een bestand te schrijven, zijn er twee identieke functies:

  • int fputs (int-bestand, string string [, int lengte ])
  • int fwrite(int-bestand, string string [, int lengte ])

De functies schrijven naar een bestand int file een string string met de opgegeven lengte int lengte ( optioneel argument). Voorbeeld:


Bestanden maken en verwijderen

Om een ​​php-bestand te maken, kunt u de functie fopen() gebruiken in de toegangsmodus "w" of "w+". Of de touch()-functie. Het stelt de wijzigingstijd van het bestand in. Als er geen element is met de gezochte naam, wordt het aangemaakt. De syntaxis is:

int touch (tekenreeks bestandsnaam [, int tijd [, int atime]])

Gebruik de functie copy() om een ​​kopie van een bestand te maken. Als argumenten worden de naam van het origineel en het bestand waarnaar de inhoud moet worden gekopieerd, gebruikt. Als het niet bestaat, wordt het gemaakt. Functie syntaxis:

int kopie(tekenreeksbestand1, tekenreeksbestand2)


U kunt een bestand verwijderen met de functie unlink(). De syntaxis ervan.

Als je zelfstandig met PHP leert werken, dan is het belangrijk om te leren hoe je gegevens uit een bestand leest en daarin wijzigingen aanbrengt. De opname in het php-bestand wordt uitgevoerd voor het ontwikkelen van webapplicaties, het wijzigen van serverinformatie en het starten van externe programma's en insluitsels.

Hoe te werken met php-bestanden

Als een bestand een dergelijke extensie heeft, betekent dit dat het programmacode bevat die is geschreven in de programmeertaal met dezelfde naam. Om wijzigingen aan te brengen, moet u een van de software-editors op uw pc installeren:

PHP-experteditor;
. Droomwever;
. Eclipse PHP-ontwikkeling;
. PHPBewerken.

Als u een website maakt, moet u vaak identieke ontwerpen gebruiken, die handig als sjablonen in een ander bestand worden opgeslagen. Hiervoor is het beter om include te gebruiken. Nadat u deze functie heeft ingevoerd, moet u de verbindingsnaam en extensie in het php-bestand schrijven, bijvoorbeeld 1.php. Dit ontwerp ondersteunt meerdere lezingen van het meegeleverde bestand, en een extra functie is de continuïteit van de code-uitvoering in het geval van een fout. Als er iets misgaat, wordt de code vanaf een nieuwe regel verder uitgevoerd.
Op deze manier neemt u het bestand op in uw code. Een andere manier is om vereiste in te voeren. In tegenstelling tot de hierboven beschreven include wordt het bestand opgenomen voordat de programmacode wordt uitgevoerd, maar u kunt er slechts één keer toegang toe krijgen.

Bestandsverificatie

Voordat u naar een php-bestand schrijft, moet u ervoor zorgen dat het bestaat, het vervolgens openen en de nodige bewerkingen uitvoeren. Om dit te doen, kunt u de functie file_exists() gebruiken; deze bevestigt de aanwezigheid, waarna het antwoord TRUE wordt geretourneerd in het editorvenster, anders - FALSE.
Een andere functie is_file() kan u laten weten dat het mogelijk is om gegevens naar een php-bestand te schrijven. Het is betrouwbaarder dan file_exits, en de meeste programmeurs gebruiken is_file om aan de slag te gaan. Nadat u hebt gecontroleerd of het bestand bestaat, kunt u ermee aan de slag.

Wijzigingen aanbrengen in een bestand

Het eerste hulpmiddel dat u kunt gebruiken om wijzigingen in een bestand aan te brengen, is fwrite(). Het schrijft regels met de volgende syntaxis:

Int - manipulator;
. Tekenreeks is een variabele.

Er is nog een functie die hierop lijkt: fputs(), wat een alias is. Er zijn geen verschillen tussen deze tools; u kunt het een of het ander kiezen. Bij studenten komt fwrite vaker voor, terwijl praktiserende programmeurs meestal fputs gebruiken.

Om een ​​PHP-invoer in een tekstbestand te plaatsen, moet aan één belangrijke voorwaarde worden voldaan: het moet open zijn voor bewerking. Dit bestand moet zich in een map met schrijfrechten bevinden.

Om te werken, probeert u eerst een tekstdocument in het programma te openen en vervolgens wijzigingen aan te brengen met behulp van gewone hulpmiddelen.

// Open een tekstbestand
$f = fopen("tekst.txt", "w");
// Schrijf een tekstreeks
fwrite($f, "Hallo! Goedendag!");
// Tekstbestand sluiten
fsluiten($f);

In dit voorbeeld is text.txt de documentnaam. Je kunt het ook anders noemen: “Hallo! Goededag! - een voorbeeld van tekst, deze kan volledig willekeurig zijn. Alle wijzigingen worden automatisch opgeslagen in het geopende bestand.

Houd er rekening mee dat PHP voor algemeen gebruik is. Het wordt intensief gebruikt om webapplicaties te maken. Deze oplossing wordt door de meeste hostingproviders ondersteund. We hebben het over de leider onder de tools die worden gebruikt om websites te maken. Nu weet je hoe je naar een php-bestand moet schrijven.

Elke programmeur moet correct met bestanden kunnen werken. Dit artikel is bedoeld voor beginnende PHP-programmeurs, maar de “verzameling recepten” zal ook nuttig zijn voor gevorderde gebruikers.

Het werken met bestanden is onderverdeeld in 3 fasen:

  1. Een bestand openen.
  2. Gegevensmanipulatie.
  3. Het bestand sluiten.

I. Een bestand openen

Om een ​​bestand in de PHP-omgeving te openen, gebruikt u de functie fopen(). De vereiste parameters voor deze functie zijn de bestandsnaam en de bestandsmodus.

$fp = fopen("counter.txt", "r");

Volgens de PHP-documentatie worden de volgende soorten bestandsmodi onderscheiden:

  1. r – open het bestand voor alleen-lezen.
  2. r+ - opent een bestand om tegelijkertijd te lezen en te schrijven.
  3. w – maakt een nieuw leeg bestand. Als een dergelijk bestand al bestaat op het moment van de oproep, wordt het vernietigd.
  4. w+ - vergelijkbaar met r+, alleen als een dergelijk bestand bestaat op het moment van aanroepen, wordt de inhoud ervan verwijderd.
  5. a – opent een bestaand bestand in de schrijfmodus, waarbij de aanwijzer naar de laatste byte van het bestand (naar het einde van het bestand) wordt verplaatst.
  6. a+ - opent een bestand in de lees-schrijfmodus, waarbij de aanwijzer naar de laatste byte van het bestand (naar het einde van het bestand) wordt verplaatst. De inhoud van het bestand wordt niet verwijderd.

Opmerking: Er kan nog één optionele parameter aan het einde van een van de regels staan: b of t . Als b is opgegeven, wordt het bestand geopend in de binaire lees-/schrijfmodus. Als t, dan wordt de regelinvoervertaalmodus voor het bestand ingesteld, d.w.z. het wordt gezien als tekstueel.

Om dit aan te tonen, kunt u het volgende scenario overwegen:

//Opent een bestand in verschillende modi
$fp = fopen("counter.txt", "r"); // Binaire modus
$fp = fopen("counter.txt", "rt"); // Tekstmodus
$fp = fopen("http://www.yandex.ru", "r");// Opent een HTTP-verbinding voor lezen
$fp = fopen("ftp://gebruiker: [e-mailadres beveiligd]", "w"); //Open een FTP-verbinding met vermelding van de login en het wachtwoord
?>

II. Manipulatie van bestandsgegevens

U kunt gegevens naar een bestand schrijven met behulp van PHP met behulp van de functie fschrijven(). Deze functie heeft 2 vereiste parameters en 1 optionele parameter nodig. De vereiste parameters zijn de bestandsdescriptor en de bestandsmodus:

$fp = fopen("counter.txt", "a"); // Open het bestand in de schrijfmodus
$mytext = "We moeten deze regel schrijven\r\n"; // Brontekenreeks
$test = fwrite($fp, $mijntekst); // Schrijf naar bestand
if ($test) echo "De gegevens zijn succesvol in het bestand ingevoerd.";
else echo "Fout bij schrijven naar bestand.";
fsluiten($fp); //Sluit het bestand
?>

Gebruik de functie om een ​​bestand regel voor regel te lezen fgets(). De functie heeft twee vereiste parameters nodig:


als ($fp)
{
terwijl (!feof($fp))
{
$mijntekst = fgets($fp, 999);
echo $mijntekst."
";
}
}

fsluiten($fp);
?>

Opmerking: In dit voorbeeld specificeert de waarde 999 het aantal tekens dat wordt gelezen totdat de aanwijzer het einde van het bestand (EOF) bereikt.

Om het bestand als één geheel te lezen, moet u de functie gebruiken leesbestand(), waarvoor 1 vereiste parameter nodig is. De functie opent een bestand, geeft de inhoud ervan weer in een browservenster en sluit het bestand vervolgens:

echoreadfile("counter.txt");
?>

U kunt ook de functie fpassthru() gebruiken, waarvoor 1 vereiste parameter nodig is. Voordat u deze functie gebruikt, moet u het bestand in de leesmodus openen. Wanneer het bestand klaar is met lezen, sluit de functie het bestand automatisch (en wordt de bestandsdescriptor ongeldig).

$fp = fopen("counter.txt", "r"); // Open het bestand in leesmodus
if ($fp) echo fpassthru($fp);
elsecho "Fout bij openen bestand";
?>

Heel vaak zijn er situaties waarin het nodig is om de inhoud van een site in een array te lezen. Deze functie omvat het gebruik van de functie bestand(). Wanneer deze functie wordt aangeroepen, wordt elke regel van het bestand opgeslagen in een afzonderlijk element van de opgegeven array.

Opmerking: De functie mag niet worden gebruikt bestand() naar binaire bestanden (binair-veilig), omdat Het is niet veilig als het gaat om het lezen van binaire bestanden, en als het ergens een end-of-file (EOF)-teken tegenkomt, garandeert dit niet dat u het volledige binaire bestand zult lezen.

$file_array = bestand("counter.txt"); // Lees het bestand in de $file_array
// Werken met arraygegevens
?>

Opmerking: het werken met arrays wordt in detail beschreven, auteurs: Mukhametshin D.F., Simdyanov I.V.

Aan het einde van het artikel vindt u een goed ‘receptenboek’ over arrays, dat oplossingen biedt voor veel problemen waarmee een webprogrammeur dagelijks te maken krijgt.

Laten we ons een situatie voorstellen waarin een bestand karakter voor karakter moet worden gelezen. Om dit te doen kunnen we de functie gebruiken fgetc(). De functie heeft één parameter nodig. De functie is handig als we een teken of het aantal identieke tekens moeten vinden.

$fp = fopen("counter.txt", "r"); // Open het bestand in leesmodus
als ($fp)
{
terwijl(!feof($fp))
{
$char = fgetc($fp);
if ($char == "c") $i = $i + 1;// Zoek het teken "c"
}
echo "Aantal 'c'-letters in bestand: ". $ik;
}
else echo "Fout bij openen bestand";
?>

III. Een bestand sluiten

Het bestand wordt gesloten met de functie fsluiten(), waarvoor 1 vereiste parameter nodig is.

$fp = fopen("counter.txt", "r");
als ($fp)
{
echo "Het bestand is geopend";
fsluiten($fp); // Het bestand sluiten
}
?>

Verzameling recepten

1) We moeten controleren of dit of dat bestand bestaat. Om dit te doen zullen we de functie gebruiken file_exists().

mijnbestand("counter.txt"); // Gebruik de functie mijnbestand, waarbij u de bestandsnaam als argument doorgeeft

function myfile($name) //Maak een functie om het bestaan ​​van een bestand te controleren
{
if (file_exists($name)) echo "Het bestand bestaat";

}
?>

Opmerking: Functie bestand_bestaat controleert geen bestanden op de externe webserver. Om de functie correct te laten werken, moet het bestand met het script zich op dezelfde server bevinden als het bestand dat wordt gecontroleerd.

2) Bepaal de bestandsgrootte met behulp van de functie bestandsgrootte()

mijnbestand("counter.txt");

function myfile($name) //Maak een functie om het bestaan ​​van een bestand te controleren en de bestandsgrootte te bepalen
{
if (file_exists($name)) echo "Bestandsgrootte: ".filesize($name)." bytes";
anders echo "Bestand bestaat niet";
}
?>

3) Maak een tijdelijk bestand met behulp van de functie tmpbestand()

$mijnbestand = tmpbestand();
fwrite($myfile, "Deze regel wordt naar een tijdelijk bestand geschreven."); // Schrijf naar een tijdelijk bestand
fseek($mijnbestand, 0); // Stel de bestandsaanwijzer in
echo fread($mijnbestand, 1024); // voer de inhoud van het bestand uit
?>

4) U moet het aantal regels in het bestand bepalen. Hiervoor gebruiken we de functie graaf()

$fp = bestand("counter.txt");
echo "Aantal regels in bestand: ".count($fp);
?>

5) We moeten een gebruiken

$fp = fopen("counter.txt", "a");
kudde($fp, LOCK_EX); // Vergrendel het bestand om te schrijven
fwrite($fp, "Te schrijven regel");
kudde($fp, LOCK_UN); // Ontgrendelen
fsluiten($fp);
?>

6) We moeten een bepaalde regel uit het bestand verwijderen

$num_stroka = 5; //Verwijder regel 5 uit het bestand
$bestand = bestand("counter.txt"); // Lees het volledige bestand in een array

voor($i = 0; $i< sizeof($file); $i++)
if($i == $num_stroka) unset($bestand[$i]);

$fp = fopen("counter.txt", "w");
fputs($fp, implode("", $file));
fsluiten($fp);
?>

7) Bepalen van het bestandstype. De functie gebruiken

PHP verscheen veel later dan programmeertalen, versterkte hun posities en formuleerde algemene ideeën over syntaxis, logica, variabelen en andere programmaobjecten. Bestanden en functies om ermee te werken boekten geen vooruitgang, en zelfs het probleem van bestandscodering, dat om natuurlijke redenen ontstond, leidde niet tot radicaal nieuwe oplossingen.

Algemene opmerkingen

Het voornaamste werk met bestanden, wat ze ook zijn, bestaat uit openen, lezen/schrijven en sluiten. U kunt de functies gebruiken om de toegang tot een bestand te blokkeren/deblokkeren terwijl het wordt verwerkt, u kunt de lees-/schrijfpositie in het bestand instellen - alles is hetzelfde als voorheen, in een ver verleden.

Een belangrijk punt in PHP is de overvloed aan functies voor het werken met bestanden en opties voor het gebruik ervan. In de praktijk is het voldoende om eenvoudige maar werkende opties te gebruiken. Een bestand is in de eerste plaats een programmageheugen. Je kunt er informatie in opslaan. Het doel van elk programma, het doel van elke website, is het presenteren, verwerken en garanderen van de veiligheid van informatie.

Essentiële omstandigheid

Voorheen was de eis van compatibiliteit, althans van onder naar boven, onwrikbaar. Dat wil zeggen dat een programma dat eenmaal in de ene versie van een programmeertaal is geschreven, idealiter in de volgende versie wordt gecompileerd/geïnterpreteerd. Bij moderne programmering is dit niet het geval. De vereiste voor compatibiliteit van syntactische structuren van een taal is geschiedenis geworden, en de strijd tussen stijlen en programmeertools en versies van bepaalde tools is de norm van hun leven geworden.

Het werken met bestanden en met databases is net zo belangrijk als de site-interface. De eerste moet zo worden gebouwd dat het niet nodig is om de sitecode te wijzigen als u het platform, de hosting of de taalversie wijzigt. De interface voor het werken met bestanden moet in een apart script worden opgenomen en volledige compatibiliteit garanderen, net zoals het ontwerp van de site zich adequaat moet aanpassen aan elk apparaat en elke browser en de rest van de functionaliteit van de site met dezelfde mogelijkheden moet bieden.

Lees en verander jezelf

Kan een programma zichzelf veranderen, dat wil zeggen: kan een script verbeteren? Tot op de dag van vandaag interesseert deze vraag velen. Maar de taak klinkt veel praktischer: PHP leest een PHP-bestand. Een ontwikkelaar kan een bepaald probleem niet altijd oplossen door specifieke code te schrijven. Soms is het nodig om dit te wijzigen wanneer een bezoeker naar de site komt en een vraag formuleert die niet was voorzien in de ontwikkelingsfase.

Net als in alle andere gevallen moet u eerst het bestand openen. Het maakt niet uit of dit bestand bestaat of niet. Als bekend is dat het bestand bestaat (de functie file_exists() geeft een positief antwoord), wordt de functie fopen() gebruikt met toegang 'r', 'r+', 'a', 'a+'. Als het bestand nog niet bestaat, dan met toegang ‘a’, ‘a+’, ‘w’, ‘w+’. Het resultaat van het openen van een bestand is de descriptor ervan. Het bestand wordt gesloten met de functie fclose().

Het is handig om PHP te gebruiken om een ​​bestand in een array te lezen als het tijdens het lezen niet nodig is om het te verwerken.

if (bestand_bestaat($fName)) (

$aLines = bestand($fName)

Bij deze optie wordt elke regel van het bestand opeenvolgend in het array-element geplaatst. Opgemerkt moet worden dat de functies file() of file_get_contents() het bestand niet hoeven te openen en sluiten.

Wanneer het invoerbestand te groot is en u slechts een klein beetje informatie nodig heeft, of om andere redenen, kunt u PHP gebruiken om het bestand regel voor regel te lezen. PHP biedt de mogelijkheid om dit te doen met de functies fgets() en fgetc().

$fvs = fopen($fNaam, "r")

while ((false !== ($cLine = fgets($fvs, 2000)))) (

$cLines .= "
" . $i . "). " . $cLine

Beide opties werken feilloos. Wanneer u echter een PHP-bestand leest voor latere wijziging, moeten er voorzorgsmaatregelen worden genomen. Het is niet altijd mogelijk om te voorzien hoe een bezoeker de website zal gebruiken in de ontwikkelingsfase van de site. Het is beter als de scripts binnen de functies van de site worden gewijzigd en de controle over deze wijziging niet beschikbaar is voor de bezoeker, inclusief de bronbeheerder.

Resultaten opslaan

De ontvangen en bijgewerkte informatie wordt regel voor regel naar het bestand geschreven door de functie fputs() of door de functie file_put_contents() als geheel.

$fName = $_SERVER["DOCUMENT_ROOT"] . "/tmp/scData.php"

$fvs = fopen($fNaam, "a")

kudde($fvs, LOCK_EX)

$cLine = "1 regel". chr(10)

fputs($fvs, $cLine)

$cLine = "2 regels" . chr(10)

fputs($fvs, $cLine)

kudde($fvs, LOCK_UN)

Bij de regel-voor-regel opnameoptie kunt u gegevens manipuleren tijdens het opnameproces; in het tweede geval wordt de geschreven string of array in het gehele bestand geplaatst.

$file = " scData.php "

$cContents = file_get_contents($file)

// een vermelding toevoegen

$cContents .= "nieuw item\n"

// schrijf het bestand terug

file_put_contents($file, $cContents)

Het lezen en schrijven van PHP-bestanden is eenvoudig en natuurlijk. Het is echter belangrijk om in gedachten te houden: elk bestand heeft een naam, extensie en pad (map). Om ervoor te zorgen dat een PHP-script bestanden kan lezen en schrijven, moet het script over de juiste rechten beschikken. Ze worden automatisch weergegeven op de hosting, maar in sommige gevallen moeten ze worden uitgebreid.

In sommige gevallen kan het wenselijk zijn om de resultaten te verifiëren door een testuitlezing uit te voeren. Het schrijven van PHP-bestanden vereist dit tijdens de ontwikkeling, maar in sommige gevallen is het controleren van de gegevensopname essentieel in het belang van de veiligheid of betrouwbaarheid van de site.

Een karakteristiek kenmerk van PHP, MySQl, JavaScript en vooral browsers: het stilletjes toestaan ​​dat er fouten optreden. “Niet herkend, niet gedaan...” is geen goede praktijk op het snijvlak van de informatietechnologie, maar het leert ontwikkelaars geen fouten te maken en schone code van hoge kwaliteit te schrijven, wat ook niet slecht is.

PHP en werken met echte documenten

PHP het lezen van een PHP-bestand is zeker van praktisch belang, maar dit is het domein van programmeren. De gebruiker en sitebezoeker zijn geïnteresseerd in informatie van toegepaste aard, die hij gewend is te zien in de vorm van tabellen en documenten, met name in de bestandsformaten *.xlsx en *.docx. Dit zijn bestanden in MS Excel- en MS Word-formaat.

Lijsten met producten, prijzen en kenmerken worden meestal gevormd in de vorm van tabellen, dus het lezen van het Excel-bestand in PHP is essentieel.

De PHPExcel- en PHPWord-bibliotheken zijn ontwikkeld om met dergelijke bestanden te werken. De inhoud van de *.xlsx- en *.docx-bestanden wordt echter weergegeven in de OOXML-standaard, dat wil zeggen dat het echte, begrijpelijke document wordt gepresenteerd in een zip-archief. Een Zip-archief is een reeks bestanden, inclusief afbeeldingen, objecten, formules en bijlagen uit andere programma's. Tekstbestanden worden hier weergegeven door beschrijvingen in de vorm van tags. Het lezen van een dergelijk bestand is niet voldoende; u moet het analyseren om de inhoud en structuur te verkrijgen voor gebruik en wijziging.

Dit betekent dat de leesoperatie verandert in een archiefopeningsprocedure. Deze bibliotheken openen het documentenarchief zelfstandig en bieden de ontwikkelaar uitgebreide functies voor het lezen, verwerken en schrijven van dergelijke documenten.

Excel-tabellen

include_once 'PhpOffice/PhpExcel/IOFactory.php'

functie scGetExcelFile($xls)(

$objPHPExcel = PHPExcel_IOFactory::load($xls)

$objPHPExcel->setActiveSheetIndex(0)

//deze array bevat arrays met tekenreeksen

$aSheet = $objPHPExcel->getActiveSheet()

$array = array()

//verwerking

foreach($aSheet->getRowIterator() als $row)(

$cellIterator = $row->getCellIterator()

foreach($cellIterator als $cell)(

array_push($item, iconv("utf-8", "cp1251", $cell->getCalculatedValue()))

array_push($array, $item)

Het lezen en verwerken van Excel-bestanden is veel lastiger dan het verwerken van Word-documenten. De beste optie, als u een serieus project voor het lezen en verwerken van toegepaste informatie moet implementeren, is om eerst de PHPWord-bibliotheek onder de knie te krijgen. Hierdoor krijgt u goede ervaring en krijgt u snel inzicht in de specifieke kenmerken van het probleem.

Word-documenten

Slechts twee regels:

$oWord = nieuwe \PhpOffice\PhpWord\PhpWord()

$oDocx = $this->oWord->loadTemplate($cFileName)

Het $cFileName-document is nu beschikbaar voor verwerking. Vervolgens wordt het archief geopend, de inhoud ervan geselecteerd en geanalyseerd, die op de website kan worden weergegeven, gewijzigd en teruggeschreven.

$zipClass = nieuw ZipArchive()

$zipClass->open($this->tempFileName)

//lees de volledige inhoud van het document

voor ($i=0; $i<$zipClass->numFiles; $i++) (

$cNameIn = $zipClass->getNameIndex($i)

$cNameInExt = substr($cNameIn, -4)

if (($cNameInExt == ".xml") || ($cNameInExt == "rels")) (

// bestanden met de extensies ".xml" en ".xml.rels" worden opgeslagen in de documenttabel

// elke XML-regel wordt op volgorde met een uniek nummer geschreven

$cBodyIn = $zipClass->getFromName($cNameIn)

$cBodyInLen = strlen($cBodyIn)

// alle andere bestanden worden ongewijzigd naar de documentmap geschreven

$cNameOnly = substr($cNameIn, strrpos($cNameIn, "/") + 1)

$zipClass->getFromName($cNameIn, $cWorkPath); // inhoud als bestand

Met de mogelijkheden van PHP Excel en PHP Word kunt u echte documenten manipuleren en de inhoud ervan op elk gewenst moment relevant maken. In de dynamische wereld van vandaag wordt dit erg belangrijk. Het zwaartepunt is al lang verschoven van het lokale gebruik van computertechnologie naar de virtuele internetruimte. Daarom is het maken van tabellen en documenten in lokale Microsoft-producten minder efficiënt dan het werken met dergelijke documenten in de automatische en semi-automatische modus op een website, die niet alleen toegankelijk is voor de maker van de tabel of het document, maar ook voor de consumenten ervan.

Tekstbestanden, een ander leven

In eerste instantie zijn tekstbestanden eenvoudiger dan PHP-bestanden of applicatiedocumenten. Er is hier echter iets om over na te denken. De lees-/schrijfbewerkingen van dergelijke bestanden zijn hierboven al aangegeven, maar de betekenis van dergelijke bestanden is veel belangrijker.

Omdat er zoiets bestaat als een client en een server (de eerste wordt gedomineerd door JavaScript, de tweede door PHP), kunnen zelfs de cookie- en sessiemechanismen niet omgaan met de noodzaak om informatie tussen scripts, pagina's en bepaalde processen over te dragen.

Het is mogelijk om de gewenste veranderingen in de database weer te geven, maar ondanks al hun voordelen en snelheid kunnen kleine tijdelijke of permanente tekstbestanden een veel interessantere optie zijn voor het verzenden van informatie. Als u niet veel kleine bestanden maakt en de grootte ervan niet beheert, kunnen ze een specifieke en flexibelere versie van een database zijn.

PHP leest een tekstbestand snel, het kan onmiddellijk worden geparseerd in een structuur, array of object. Dit laatste is erg belangrijk, omdat je hiermee objecten kunt maken die buiten de tijd leven die is toegewezen aan een PHP-script, dat, zoals je weet, alleen op de server kan bestaan ​​en alleen op het moment dat de pagina wordt geladen, waardoor een AJAX-antwoord wordt gegenereerd. , of om een ​​andere reden waardoor de PHP-interpreter wordt gestart.

Als je bedenkt dat een tekstbestand de inhoud en structuur van de ontwikkelaar is, is een PHP-bestand de syntaxis van de tolk plus de logica van de ontwikkelaar, en zijn "getagde" beschrijvingen html, css en xml meer semantische elementen, maar gereguleerd volgens statische normen. Men zou tot de conclusie kunnen komen dat het waarschijnlijk tijd is dat de bestanden nieuwe inhoud krijgen, en dit op zichzelf zou hun kwaliteit en gebruikslogica moeten bepalen. Juist omdat programmeren nog niet klaar is voor de volgende ontwikkelingsfase, blijven bestanden vandaag de dag gewoon bestanden die de ontwikkelaar maakt en het gebruik ervan bepaalt.

Het meest interessante en veelbelovende is wanneer PHP een PHP-bestand zelfstandig leest wanneer dat nodig is. En een eenvoudige PHP die een regel uit een bestand leest, resulteert in de creatie van een object, tenminste in de staat waarin het is opgeslagen. Dit zijn niet helemaal bekende ideeën, maar in de moderne wereld verandert alles zo snel.

PHP - Werken met bestanden

Elke programmeur moet correct met bestanden kunnen werken. Dit artikel is bedoeld voor beginnende PHP-programmeurs, maar de “verzameling recepten” zal ook nuttig zijn voor gevorderde gebruikers.

Het werken met bestanden is onderverdeeld in 3 fasen:

  • Een bestand openen.
  • Gegevensmanipulatie.
  • Het bestand sluiten.

I. Een bestand openen

Om een ​​bestand in PHP te openen, gebruik je de functie fopen(). De vereiste parameters voor deze functie zijn de bestandsnaam en de bestandsmodus.

Volgens de PHP-documentatie worden de volgende soorten bestandsmodi onderscheiden:

  • r – open het bestand voor alleen-lezen.
  • r+ - opent een bestand om tegelijkertijd te lezen en te schrijven.
  • w – maakt een nieuw leeg bestand. Als een dergelijk bestand al bestaat op het moment van de oproep, wordt het vernietigd.
  • w+ - vergelijkbaar met r+, alleen als een dergelijk bestand bestaat op het moment van aanroepen, wordt de inhoud ervan verwijderd.
  • a – opent een bestaand bestand in de schrijfmodus, waarbij de aanwijzer naar de laatste byte van het bestand (naar het einde van het bestand) wordt verplaatst.
  • a+ - opent een bestand in de lees-schrijfmodus, waarbij de aanwijzer naar de laatste byte van het bestand (naar het einde van het bestand) wordt verplaatst. De inhoud van het bestand wordt niet verwijderd.

Opmerking: Er kan nog één optionele parameter aan het einde van een van de regels staan: b of t. Als b is opgegeven, wordt het bestand geopend in de binaire lees-/schrijfmodus. Indien t, dan wordt de regelfeedvertaalmodus voor het bestand ingesteld, d.w.z. het wordt gezien als tekstueel.

Om dit aan te tonen, kunt u het volgende scenario overwegen:

//Opent een bestand in verschillende modi

$fp = fopen("counter.txt", "r"); // Binaire modus

$fp = fopen("counter.txt", "rt"); // Tekstmodus

$fp = fopen("http://www.yandex.ru", "r");// Opent een HTTP-verbinding voor lezen

$fp = fopen("ftp://gebruiker: [e-mailadres beveiligd]", "w"); //Open een FTP-verbinding met vermelding van de login en het wachtwoord

II. Manipulatie van bestandsgegevens

U kunt gegevens naar een bestand schrijven met behulp van PHP met behulp van de functie fwrite(). Deze functie heeft 2 vereiste parameters en 1 optionele parameter nodig. De vereiste parameters zijn de bestandsdescriptor en de bestandsmodus:

$fp = fopen("counter.txt", "a"); // Open het bestand in de schrijfmodus

$mytext = "We moeten deze regel schrijven\r\n"; // Brontekenreeks

$test = fwrite($fp, $mijntekst); // Schrijf naar bestand

Als ($test)

Echo "De gegevens zijn succesvol in het bestand ingevoerd.";

Anders

Echo "Fout bij schrijven naar bestand.";

Fsluiten($fp); //Sluit het bestand

Om een ​​bestand regel voor regel te lezen, gebruikt u de functie fgets(). De functie heeft twee vereiste parameters nodig:

Als ($fp)

Terwijl (!feof($fp))

$mijntekst = fgets($fp, 999);

Echo $mijntekst."
";

Anders

Fsluiten($fp);

Opmerking: In dit voorbeeld specificeert de waarde 999 het aantal tekens dat wordt gelezen totdat de aanwijzer het einde van het bestand (EOF) bereikt.

Echo-leesbestand("counter.txt");

U kunt ook de functie fpassthru() gebruiken, waarvoor 1 vereiste parameter nodig is. Voordat u deze functie gebruikt, moet u het bestand in de leesmodus openen. Wanneer het bestand klaar is met lezen, sluit de functie het bestand automatisch (en wordt de bestandsdescriptor ongeldig).

$fp = fopen("counter.txt", "r"); // Open het bestand in leesmodus

Als ($fp)

Echo fpassthru($fp);

Anders

Echo "Fout bij openen bestand";

Heel vaak zijn er situaties waarin het nodig is om de inhoud van een site in een array te lezen. Deze functie omvat het gebruik van de functie file(). Wanneer deze functie wordt aangeroepen, wordt elke regel van het bestand opgeslagen in een afzonderlijk element van de opgegeven array.

Opmerking: de functie file() mag niet worden gebruikt voor binair veilige bestanden omdat Het is niet veilig als het gaat om het lezen van binaire bestanden, en als het ergens een end-of-file (EOF)-teken tegenkomt, garandeert dit niet dat u het volledige binaire bestand zult lezen.

$file_array = bestand("counter.txt"); // Lees het bestand in de $file_array

// Werken met arraygegevens

Opmerking: het werken met arrays wordt hier in detail beschreven, auteurs: Mukhametshin D.F., Simdyanov I.V.

Aan het einde van het artikel vindt u een goed ‘receptenboek’ over arrays, dat oplossingen biedt voor veel problemen waarmee een webprogrammeur dagelijks te maken krijgt.

Laten we ons een situatie voorstellen waarin een bestand karakter voor karakter moet worden gelezen. Om dit te doen, kunnen we de functie fgetc() gebruiken. De functie heeft één parameter nodig. De functie is handig als we een teken of het aantal identieke tekens moeten vinden.

$fp = fopen("counter.txt", "r"); // Open het bestand in leesmodus

Als ($fp)

Terwijl(!feof($fp))

$char = fgetc($fp);

Als ($char == "c")

$i = $i + 1;// Zoek het symbool “c”

Echo "Aantal 'c'-letters in bestand: ". $ik;

Anders echo "Fout bij openen bestand";

III. Een bestand sluiten

Het bestand wordt gesloten met de functie fclose(), waarvoor 1 vereiste parameter nodig is.

$fp = fopen("counter.txt", "r");

Als ($fp)

Echo "Bestand geopend";

Fsluiten($fp); // Het bestand sluiten

Verzameling recepten

1) We moeten controleren of dit of dat bestand bestaat. Om dit te doen, zullen we de file_exists() functie gebruiken.

mijnbestand("counter.txt"); // Gebruik de functie mijnbestand, waarbij u de bestandsnaam als argument doorgeeft

function myfile($name) //Maak een functie om het bestaan ​​van een bestand te controleren

If (file_exists($name)) echo "Het bestand bestaat";

Opmerking: De functie file_exists controleert geen bestanden op de externe webserver. Om de functie correct te laten werken, moet het bestand met het script zich op dezelfde server bevinden als het bestand dat wordt gecontroleerd.

2) Bepaal de bestandsgrootte met behulp van de filesize() functie

mijnbestand("counter.txt");

//Maak een functie om het bestaan ​​van een bestand te controleren en de bestandsgrootte te bepalen

functie mijnbestand($name)

If (file_exists($name)) echo "Bestandsgrootte: ".filesize($name)." bytes";

Anders echo "Het bestand bestaat niet";

3) Maak een tijdelijk bestand met de functie tmpfile().

$mijnbestand = tmpbestand();

// Schrijf naar een tijdelijk bestand

Fwrite($myfile, "Deze regel wordt naar een tijdelijk bestand geschreven.");

Fseek($mijnbestand, 0); // Stel de bestandsaanwijzer in

Echo fread($mijnbestand, 1024); // voer de inhoud van het bestand uit

4) U moet het aantal regels in het bestand bepalen. Om dit te doen gebruiken we de count() functie

$fp = bestand("counter.txt");

Echo "Aantal regels in bestand: ".count($fp);

5) We moeten een gebruiken

$fp = fopen("counter.txt", "a");

Flock($fp, LOCK_EX); // Vergrendel het bestand om te schrijven

Fwrite($fp, "String om te schrijven");

Flock($fp, LOCK_UN); // Ontgrendelen

Fsluiten($fp);

6) We moeten een bepaalde regel uit het bestand verwijderen

$num_stroka = 5; //Verwijder regel 5 uit het bestand

$bestand = bestand("counter.txt"); // Lees het volledige bestand in een array

For($i = 0; $i< sizeof($file); $i++)

If($i == $num_stroka) unset($file[$i]);

$fp = fopen("counter.txt", "w");

Fputs($fp, implode("", $file));

Fsluiten($fp);

7) Bepalen van het bestandstype. We gebruiken de functie filetype(), waarvoor één enkele parameter nodig is

$mijntype = bestandstype("counter.txt");

Echo "Bestandstype: ".$mytype;

Na de aanroep kan de string een van de volgende waarden bevatten:

bestand – normaal bestand

dir – map

fifo – fifo-kanaal

blok - blokgericht apparaat

char – karaktergericht apparaat

onbekend – onbekend bestandstype

8) Als u alle parameters van een bestand wilt bekijken, moet u de functie stat() gebruiken

$bestandsnaam = stat("counter.txt");

Echo"

";

Print_r($bestandsnaam);

Echo"

";

9) We moeten het bestand wissen, gebruik de functie ftruncate().

$fp = fopen("counter.txt", "a"); //Open het bestand in de opnamemodus

Ftruncate($fp, 0) // wis het bestand

10) We moeten de datum van de laatste wijziging van het bestand achterhalen. We gebruiken de functie filectime(). De functie retourneert een tijdwaarde in Unix-tijdstempelvorm.

Echo filectime("counter.txt");