Как записать в файл на PHP?


108

У меня есть этот скрипт на одном бесплатном сервере с поддержкой PHP:

<html>
<body>

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


fclose($file);
?>

</body>
</html>

Он создает файл lidn.txt, но он пустой.

Как мне создать файл и что-то в него записать, например строчку «Кошки гонятся за мышами»?

Ответы:


153

Вы можете использовать функцию более высокого уровня, например:

file_put_contents($filename, $content);

что идентично вызову fopen(), fwrite()и fclose()последовательной записи данных в файл.

Документы: file_put_contents


3
Просто примечание, file_put_contents()работает только в PHP5. В этом случае это не похоже на проблему (в конце концов, ваш ответ получил одобрение), но все еще может быть несколько хостов, на которых работает PHP4.x.
Дурот

2
Очень важное замечание: file_put_contents () - кошмар памяти по сравнению с fopen (). Мне нравится его использовать, но при работе с большими файлами вы хотите иметь возможность «передавать» в него данные. PHP потребует большое количество конечных файлов в качестве внутренней памяти, так что имейте это в виду при использовании этой функции. Для меньших объемов данных я бы рекомендовал его, потому что он прост в использовании.
Джон,

1
Затем используйте file_put_contents ($ filename, $ other_stream). Это то же самое, что использовать stream_copy_to_stream-), что очень эффективно с точки зрения памяти.
Savageman

@Duroth работает только с PHP5 или работает только с PHP5? это 2 разные вещи.
Xsmael

2
@Xsmael Не в далеком прошлом 2009 г .;) PHP7 тогда не было. Но да, put_file_contents()впервые был представлен в PHP5, а с тех пор был включен и в более поздние версии.
Дурот

88

Рассмотрим fwrite () :

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

Вы можете использовать приведенный выше код, также вы можете использовать file_put_contents для получения подробной информации о том, как читать и писать файл, вы можете обратиться к techflirt.com/file-handling-in-php
Кумар Сингх

@sathish после записи в файл, как указано выше, как мы читаем файл, не закрывая файл ( fclose($fp) ), я пытался $fp = fopen('lidn.txt', 'w+');, $fp = fopen('lidn.txt', 'a+');но ни один из них не работал
Касун Сиямбалапития


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

Ты используешь fwrite()


после записи в файл, как указано выше, как мы читаем файл, не закрывая file ( fclose($fh)), я попробовал с $fh = fopen('lidn.txt', 'w+');: `$ fh = fopen ('lidn.txt', 'a +'); `но ни один из них не работал
Касун Сиямбалапития


6

Я использую следующий код для записи файлов в свой веб-каталог.

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);
}
?>

Это рабочий сценарий. не забудьте изменить URL-адрес в действии формы и целевой файл в функции fopen (), если хотите использовать его на своем сайте.

Удачи.


1
Я только начал писать php, но похоже, что вы не просто пишете текстовый файл, но вы записываете файл кода php на свой сервер, который затем можно было бы запустить сразу после этого, указав URL-адрес "demo.php". Кто-то может написать вредоносный PHP-код на ваш сервер и немедленно его запустить, верно? Я предполагаю, что это сделано для того, чтобы вы могли протестировать свои собственные коды, но люди должны быть предупреждены о рисках этой конкретной реализации. (При этом, мне это нравится, и мы сделаем это сам)
RufusVS

6

Для записи в файл PHPнеобходимо выполнить следующие действия:

  1. Открыть файл

  2. Записать в файл

  3. Закройте файл

    $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

Вот шаги:

  1. Открыть файл
  2. Записать в файл
  3. Закройте файл

    $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()немного быстрее и file_put_contents()в любом случае является просто оболочкой для этих трех методов, поэтому вы потеряете накладные расходы. Статья

file_put_contents (файл, данные, режим, контекст):

file_put_contentsЗаписывает строку в файл.

Эта функция следует этим правилам при доступе к файлу. Если установлен FILE_USE_INCLUDE_PATH, проверьте путь включения для копии имени файла. Создайте файл, если он не существует, затем откройте файл и заблокируйте файл, если установлен LOCK_EX и установлен FILE_APPEND, перейти в конец файла. В противном случае очистите содержимое файла. Запишите данные в файл, закройте файл и снимите все блокировки. Эта функция возвращает номер символа, записанного в файл в случае успеха, или FALSE в случае ошибки.

fwrite (файл, строка, длина):

Запись fwriteв открытый файл. Функция остановится в конце файла или когда он достигнет указанной длины, в зависимости от того, что наступит раньше. Эта функция возвращает количество записанных байтов или FALSE в случае ошибки.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.