Jak pisać do pliku w PHP?


108

Mam ten skrypt na jednym bezpłatnym serwerze obsługującym PHP:

<html>
<body>

<?php
$file = fopen("lidn.txt","a");


fclose($file);
?>

</body>
</html>

Tworzy plik lidn.txt, ale jest pusty.

Jak mogę utworzyć plik i coś do niego zapisać, na przykład wiersz „Koty gonią myszy”?

Odpowiedzi:


153

Możesz użyć funkcji wyższego poziomu, takiej jak:

file_put_contents($filename, $content);

która jest identyczna z wywołaniem fopen(), fwrite()i fclose()kolejno do zapisu danych do pliku.

Dokumenty: file_put_contents


3
Tylko uwaga, file_put_contents()działa tylko w PHP5. W tym przypadku nie wydaje się to problemem (w końcu twoja odpowiedź została zaakceptowana), ale nadal może być kilka hostów, na których działa PHP4.x.
Duroth

2
Bardzo ważna uwaga dodatkowa: file_put_contents () jest koszmarem pamięci w porównaniu do fopen (). Uwielbiam go używać, ale podczas obsługi dużych plików chcesz mieć możliwość przesyłania do niego danych. PHP będzie wymagało dużej wielokrotności rozmiaru pliku końcowego jako pamięci wewnętrznej, więc miej to na uwadze podczas korzystania z tej funkcji. W przypadku mniejszych ilości danych polecam go ze względu na łatwość użytkowania.
Jan

1
Następnie użyj file_put_contents ($ filename, $ other_stream). To to samo, co użycie stream_copy_to_stream-), które jest bardzo wydajne pod względem pamięci.
Savageman,

@Duroth działa tylko w PHP5 czy tylko z PHP5? to są 2 różne rzeczy.
Xsmael

2
@Xsmael Nie w odległej przeszłości 2009;) PHP7 nie było wtedy w pobliżu. Ale tak, put_file_contents()został po raz pierwszy wprowadzony w PHP5 i od tego czasu został uwzględniony również w późniejszych wersjach.
Duroth

88

Rozważ fwrite () :

<?php
$fp = fopen('lidn.txt', 'w');
fwrite($fp, 'Cats chase mice');
fclose($fp);
?>

Można użyć również powyższy kod można użyć file_put_contents o szczegółach dotyczących sposobu odczytu i zapisu plików można odnieść do techflirt.com/file-handling-in-php
Ankur Kumar Singh

@sathish po zapisaniu do pliku jak wyżej, jak odczytujemy plik bez zamykania pliku ( fclose($fp) ), próbowałem z $fp = fopen('lidn.txt', 'w+');, $fp = fopen('lidn.txt', 'a+');ale żaden z nich nie działał
Kasun Siyambalapitiya


10
$text = "Cats chase mice";
$filename = "somefile.txt";
$fh = fopen($filename, "a");
fwrite($fh, $text);
fclose($fh);

Używasz fwrite()


po zapisaniu do pliku jak powyżej, jak odczytać plik bez zamykania pliku ( fclose($fh)), próbowałem z $fh = fopen('lidn.txt', 'w+');, `$ fh = fopen ('lidn.txt', 'a +'); `ale żadne z nich nie działało
Kasun Siyambalapitiya


6

Używam następującego kodu do zapisywania plików w moim katalogu internetowym.

write_file.html

<form action="file.php"method="post">
<textarea name="code">Code goes here</textarea>
<input type="submit"value="submit">
</form>

write_file.php

<?php
// strip slashes before putting the form data into target file
$cd = stripslashes($_POST['code']);

// Show the msg, if the code string is empty
if (empty($cd))
    echo "Nothing to write";

// if the code string is not empty then open the target file and put form data in it
else
{
    $file = fopen("demo.php", "w");
    echo fwrite($file, $cd);

    // show a success msg 
    echo "data successfully entered";
    fclose($file);
}
?>

To jest działający skrypt. pamiętaj, aby zmienić adres URL w akcji formularza i plik docelowy w funkcji fopen (), jeśli chcesz go użyć w swojej witrynie.

Powodzenia.


1
Dopiero co zacząłem pisać php, ale wygląda na to, że nie tylko piszesz plik tekstowy, ale piszesz plik z kodem php na serwerze, który można następnie uruchomić natychmiast po odwołaniu się do adresu URL „demo.php”. Ktoś mógłby napisać złośliwy kod PHP na twoim serwerze i natychmiast go wykonać, prawda? Zakładam, że tak jest, abyś mógł przetestować własne kody, ale należy ostrzec ludzi o ryzyku związanym z tą konkretną implementacją. (To powiedziawszy, podoba mi się i zrobię to sam)
RufusVS

6

Aby zapisać do pliku PHP, musisz wykonać następujące czynności:

  1. Otwórz plik

  2. Napisz do pliku

  3. Zamknij plik

    $select = "data what we trying to store in a file";
    $file = fopen("/var/www/htdocs/folder/test.txt", "a");
    fwrite($file  , $select->__toString());
         fclose($file );
    

6

Oto kroki:

  1. Otwórz plik
  2. Napisz do pliku
  3. Zamknij plik

    $select = "data what we trying to store in a file";
    $file = fopen("/var/www/htdocs/folder/test.txt", "w");        
    fwrite($file, $select->__toString());
    fclose($file);
    

5

fwrite()jest odrobinę szybszy i file_put_contents()tak czy siak tylko owija te trzy metody, więc stracisz narzut. Artykuł

file_put_contents (plik, dane, tryb, kontekst):

file_put_contentsPisze ciąg do pliku.

Ta funkcja jest zgodna z tymi regułami podczas uzyskiwania dostępu do pliku.Jeśli ustawiono FILE_USE_INCLUDE_PATH, sprawdź ścieżkę dołączania kopii nazwy pliku Utwórz plik, jeśli nie istnieje, a następnie otwórz plik i zablokuj plik, jeśli ustawiono LOCK_EX i jeśli ustawiono FILE_APPEND, przejdź na koniec pliku. W przeciwnym razie wyczyść zawartość pliku Zapisz dane do pliku i zamknij plik oraz zwolnij wszelkie blokady. Ta funkcja zwraca liczbę znaków zapisanych w pliku w przypadku powodzenia lub FALSE w przypadku niepowodzenia.

fwrite (plik, ciąg, długość):

Te fwritezapisy do otwartej funkcji file.The zatrzyma się na końcu pliku lub po osiągnięciu określonej długości, cokolwiek first.This funkcja zwraca liczbę bajtów zapisanych lub FALSE w przypadku niepowodzenia.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.