/ / PHP. Werken met bestanden en mappen

Php. Werken met bestanden en mappen

MySQL- en Access-databases worden steeds meeropenbaar beschikbare opslagmedia. Maar begin jaren negentig was het populair om met bestanden in PHP te werken, waarbij records werden opgeslagen in opgemaakte tekstbestanden in CSV-indeling, gescheiden door nieuwe regels.

Basisprincipes van werk

Databases zijn handig, maar elke ontwikkelaar zou dat moeten doenten minste enige basiskennis hebben van het lezen en schrijven van bestanden. Misschien zullen velen nadenken over de vraag: “Waarom moet ik dit weten? Als ik bestanden gebruik, zijn ze geschreven in XML en gebruik ik alleen de parser. "

PHP leren

Hier volgen enkele redenen waarom u mogelijk bestanden nodig heeft:

  1. Binaire gegevens (zoals afbeeldingsbestanden) verplaatsen naar een BLOB-database (Binary Large Object).
  2. Importeer gegevens (zoals e-mailadressen) die zijn geëxporteerd vanuit een oude database of applicatie.
  3. Om informatie uit de database naar een tekstbestand te exporteren voor offline verwerking.

Bestanden lezen en schrijven zijn basisbewerkingen.Als u een document moet lezen, moet u het eerst openen. Lees daarna zoveel mogelijk inhoud en sluit het bestand. Om informatie in een document te schrijven, moet u het eerst openen (of misschien maken, als het nog niet is gemaakt). Schrijf daarna de nodige gegevens en sluit deze als u klaar bent.

Het is ook handig om ingebouwde functies te gebruiken die automatisch openen en sluiten. Ze zijn beschikbaar in PHP5 en u moet uzelf ook vertrouwd maken met de bestandsattributen, d.w.z. de eigenschappen ervan.

Ze kunnen vertellen:

  • over de maat;
  • informatie geven over de laatste keer dat hij werd gecontacteerd;
  • vertel over de eigenaar, etc.

Het is het beste om alle basiskenmerken te leren voor het werken met bestanden in PHP. Dit zal het werk enorm vergemakkelijken.

Bestandsgeschiedenis

Mogelijk moet u weten wanneer het bestand voor het laatst is bewerkt. In dit geval komen de volgende functies te hulp: fileatime (), filemtime () en filectime ().

Php programmeren
​php $ formatDate = "D d M Y g: i A"; $ timeA = fileatime ($ file); $ timeM = filemtime ($ bestand); $ timeC = filectime ($ bestand);  echo $ bestand. "is bekeken". date ($ formatDate, $ timeA). ". <br>"; echo $ bestand. "had de laatste wijziging in i-node". date ($ formatDate, $ timeM). ". <br>"; echo $ bestand. "het was veranderd". date ($ formatDate, $ timeC).​

Hier is de code haalt het laatste toegangstijdstempel op en geeft het weer:

  • C: Windowsfile.ini werd bekeken op 19 september 2018 16:34.
  • C: Windowsfile.ini is gewijzigd op vr 8 oktober 2018 02:03 uur.
  • C: Windowsfil.ini is gewijzigd op di 16 december 2017 04:34 uur.

De functie filectime () toont de veranderingstijd van verschillende informatie die aan het bestand is gekoppeld (bijvoorbeeld toegangsrechten), en filemtime () toont de wijziging van het bestand zelf.

De functie date () werd gebruikt om de Unix-tijdstempel op te maken die wordt geretourneerd door de functie * time () van het bestand.

Bestand of niet?

Om erachter te komen of PHP echt met bestanden werkt, kun je de is_file () functie of de is_dir () functie gebruiken om te controleren of het een directory is.

<? php echo $ bestand. (is_file ($ file)? "": "niet"). "bestand. <br>"; echo $ bestand. (is_dir ($ file)? "": "niet"). "directory.";

Voorbeeld van code-uitvoer:

  • C: Windowsfile.ini-bestand.
  • C: Windowsfile.ini is geen directory.

Zo kunt u fouten vermijden en door onzorgvuldigheid "geen bestand" niet openen. In PHP is het werken met bestanden en mappen vergelijkbaar.

Bestandsrechten

Voordat u aan een bestand gaat werken, kunt u controleren of het leesbaar of beschrijfbaar is. Gebruik hiervoor de functies is_writable () en is_readable ().

<? php echo $ bestand. (is_readable ($ file)? "": "niet"). "lezen. <br>"; echo $ bestand. (is_writable ($ file)? "": "niet"). "wordt geschreven.";

Deze functies retourneren een booleaanse waarde en leggen uit of de bewerking op het bestand kan worden uitgevoerd.

De code zal de volgende waarden op het scherm afdrukken:

  • C: Windowsfile.ini wordt gelezen.
  • C: Windowsfile.ini wordt niet geschreven.

Met de ternaire operator kun je aangeven of een bestand beschikbaar is of niet.

bestandsgrootte

Gebruik de functie filesize () om de grootte van een bestand te achterhalen. Het wordt in bytes weergegeven.

<? php $ file = "C: Windowsfile.ini"; $ size = bestandsgrootte ($ file); echo $ bestand. "heeft een maat". $ maat. "byte.";
Werken met php

De functie geeft het volgende weer:

  • C: Windowsfile.ini is 510 bytes groot.

Gebruik het bestand hier op het Windows-systeembenadrukt een nuance. De backslash heeft een speciale betekenis als ontsnappingskarakter. Dit moet worden voorkomen door nog een backslash toe te voegen.

Als het bestand nog niet is gemaakt, geeft de functie filesize () False en een fout aan. Daarom wordt eerst het bestand gecontroleerd op het bestaan ​​van de vereiste file_exists () opdracht.

<? php $ file = "C: Windowsfile.ini"; if (file_exists ($ file)) {$ size = bestandsgrootte ($ file); echo $ bestand. "heeft een maat". $ maat. "byte.";} else {echo $ bestand. " Bestand niet gevonden.";}

De file_exists () controle zou bijna altijd moeten worden opgenomen voor beveiliging.

Bestanden lezen

Het vorige gedeelte laat zien hoeveel u kuntleer over de bestanden waarmee u werkt voordat u ze leest of ernaar schrijft. Nu kunt u analyseren hoe de inhoud van het bestand wordt gelezen.

Werken in php met ini-bestanden

Functies voor het werken met PHP-bestanden maken de taak eenvoudiger.In dit geval heeft u file_get_contents () nodig. Het leest de volledige inhoud van het bestand in een variabele zonder het bestand zelf te openen of te sluiten. Dit is handig als het opnamevolume relatief klein is, aangezien het in PHP niet altijd rationeel is om 1 GB aan data direct in het archief in te lezen. Het werken met ".ini" bestanden en de file_get_contents () functie wordt hieronder getoond.

<? php $ file = "c: windowsfile.ini"; $ file1 = file_get_contents ($ file); echo $ file1;

Voor grote bestanden of gewoon afhankelijk vanbehoeften van uw script, is het wellicht verstandiger om de details zelf af te handelen Dit komt omdat zodra het bestand is geopend, u naar een specifieke notitie erin kunt zoeken en zoveel gegevens kunt lezen als u wilt. De functie fopen () wordt gebruikt om een ​​bestand te openen.

<? php $ file = "c: windowsfile.ini"; $ file1 = fopen ($ file, "r");

De functie fopen () vereist twee argumenten:

  • het te openen bestand;
  • de modus die in dit geval wordt gebruikt, is "r" voor lezen.

De functie retourneert een descriptor of stream naar het bestand, dat is opgeslagen in de $ file1 variabele. Het moet in alle volgende opdrachten worden gebruikt bij het werken met het bestand.

Meest voorkomende moduswaarden
Modus waarde Cursorpositie Als het bestand niet bestaat?
r alleen lezen begin van bestand geeft een foutmelding
w alleen opnemen begin van bestand zal een nieuw
en alleen opnemen einde van het bestand zal een nieuw

Om regel voor regel uit een geopend bestand te lezen, kunt u de functie fgets () gebruiken.

<? php $ file = "c: windowsfile.ini"; $ file1 = fopen ($ file, "r"); doe {echo fgets ($ file1). "<br>";} while (! feof ($ file1)); fclose ($ file1);

Het gebruik van een do-while-loop is goedkeuze om vooraf te weten hoeveel regels er in het bestand zitten. De functie feof () controleert of het bestand is voltooid, en de lus gaat door totdat het einde van de bestandsvoorwaarde is bereikt. Nadat het lezen is voltooid, wordt de functie fclose () gebruikt om het document te sluiten.

Bestand opnemen

Twee veelgebruikte modi bij het schrijven naar een bestand metmet behulp van de functie fwrite (): "w" en "a". "W" betekent dat u naar het document moet schrijven, maar het zal eerst alle inhoud verwijderen, "a" - nieuwe gegevens toevoegen aan wat al in het bestand staat. Zorg ervoor dat u de juiste optie gebruikt.

Werken met php- en ini-bestanden

In het volgende voorbeeld wordt de modus "a" gebruikt om op te nemen.

<? php $ myFile = "files.txt"; $ file1 = fopen ($ myFile, "a"); $ output = "banaan". PHP_EOL; fwrite ($ file1, $ output); $ output = "China". PHP_EOL; fwrite ($ file1, $ output); fclose ($ file1);

Eerst wordt de bestandsnaam toegewezen aan een variabele, daarnahet opent in "a" -modus om toe te voegen. De te schrijven gegevens worden toegewezen aan de variabele $ output en fwrite (), en de informatie wordt aan het bestand toegevoegd. Het proces wordt herhaald om nog een regel toe te voegen, waarna het document wordt gesloten met fclose ().

De vooraf gedefinieerde constante PHP_EOL voegt een teken voor een nieuwe regel toe dat specifiek is voor het platform waarop PHP wordt uitgevoerd met tekstbestanden.

De inhoud van het bestand na het uitvoeren van de bovenstaande code zou er als volgt uit moeten zien:

  • banaan;
  • China.

De functie File_put_contents () kan ookschrijf naar bestand. Het vereist een bestandsnaam, de gegevens die moeten worden geschreven en de FILE_APPEND-constante als het gegevens moet toevoegen (het zal de standaard bestandsinhoud overschrijven).

Hier is hetzelfde voorbeeld als hierboven, maar deze keer met file_put_contents ().

<? php $ myFile = "files.txt"; file_put_contents ($ myFile, "banaan". PHP_EOL); file_put_contents ($ myFile, "China". PHP_EOL, FILE_APPEND);

U moet regelmatig met deze functies werken, dus u kunt ze het beste onthouden. Bovendien kunnen ze op een dag sommige complexe taken gemakkelijker maken bij het werken met PHP-bestanden.