Como escrever em um arquivo em PHP?


108

Eu tenho este script em um servidor gratuito com suporte a PHP:

<html>
<body>

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


fclose($file);
?>

</body>
</html>

Ele cria o arquivo lidn.txt, mas está vazio.

Como posso criar um arquivo e escrever algo nele, por exemplo, a linha "Gatos perseguem ratos"?

Respostas:


153

Você pode usar uma função de nível superior como:

file_put_contents($filename, $content);

que é idêntico a chamar fopen(), fwrite()e, fclose()sucessivamente, gravar dados em um arquivo.

Documentos: file_put_contents


3
Apenas uma nota lateral, file_put_contents()funciona apenas em PHP5. Não parece ser um problema neste caso (sua resposta foi aceita, afinal), mas ainda pode haver alguns hosts por aí executando PHP4.x.
Duroth de

2
Uma nota muito importante: file_put_contents () é um pesadelo da memória em comparação com fopen (). Eu adoro usá-lo, mas ao lidar com arquivos grandes, você deseja poder "transmitir" dados para ele. O PHP exigirá um grande múltiplo do tamanho final do arquivo como memória interna, portanto, tenha isso em mente ao usar esta função. Para quantidades menores de dados, eu o recomendaria por ser de fácil uso.
John

1
Então use file_put_contents ($ filename, $ other_stream). É o mesmo que usar stream_copy_to_stream-), que é muito eficiente em termos de memória.
Savageman

@Duroth funciona apenas no PHP5 ou funciona apenas no PHP5? essas são 2 coisas diferentes.
Xsmael

2
@Xsmael Não no passado distante de 2009;) O PHP7 não existia naquela época. Mas sim, put_file_contents()foi introduzido pela primeira vez no PHP5 e foi incluído desde então, em versões posteriores também.
Duroth

88

Considere fwrite () :

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

Você pode usar o código acima e também pode usar file_put_contents para obter detalhes sobre como ler e gravar arquivos. Você pode consultar techflirt.com/file-handling-in-php
Ankur Kumar Singh

@sathish depois de gravar no arquivo como acima, como lemos o arquivo sem fechá-lo ( fclose($fp) ), tentei com $fp = fopen('lidn.txt', 'w+');, $fp = fopen('lidn.txt', 'a+');mas nenhum deles funcionou
Kasun Siyambalapitiya


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

Você usa fwrite()


depois de escrever no arquivo como acima, como lemos o arquivo sem fechar o arquivo ( fclose($fh)), tentei com $fh = fopen('lidn.txt', 'w+');, `$ fh = fopen ('lidn.txt', 'a +'); `mas nenhum deles funcionou
Kasun Siyambalapitiya

10

É fácil escrever o arquivo:

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

6

Eu uso o seguinte código para escrever arquivos no meu diretório da web.

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

Este é um script de trabalho. certifique-se de alterar o url na ação do formulário e o arquivo de destino na função fopen () se quiser usá-lo em seu site.

Boa sorte.


1
Acabei de começar a escrever php, mas parece que você não está apenas escrevendo um arquivo de texto, mas também um arquivo de código php em seu servidor, que poderia ser executado imediatamente após, referenciando a URL "demo.php". Alguém poderia escrever código PHP malicioso em seu servidor e executá-lo imediatamente, certo? Presumo que seja para que você possa testar seus próprios códigos, mas as pessoas devem ser alertadas sobre os riscos dessa implementação específica. (Dito isso, eu gosto e vou fazer isso sozinho)
RufusVS

6

Para gravar em um arquivo, PHPvocê precisa seguir as seguintes etapas:

  1. Abra o arquivo

  2. Grave no arquivo

  3. Feche o arquivo

    $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

Aqui estão as etapas:

  1. Abra o arquivo
  2. Grave no arquivo
  3. Feche o arquivo

    $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()é um pouco mais rápido e file_put_contents()é apenas um invólucro em torno desses três métodos de qualquer maneira, então você perderia a sobrecarga. Artigo

file_put_contents (arquivo, dados, modo, contexto):

O file_put_contentsgrava uma string em um arquivo.

Esta função segue estas regras ao acessar um arquivo. Se FILE_USE_INCLUDE_PATH estiver definido, verifique o caminho de inclusão para uma cópia do nome do arquivo Crie o arquivo se ele não existir, abra o arquivo e bloqueie o arquivo se LOCK_EX estiver definido e se FILE_APPEND estiver definido, mova para o final do arquivo. Caso contrário, limpe o conteúdo do arquivo Grave os dados no arquivo e feche o arquivo e libere todos os bloqueios. Esta função retorna o número do caractere gravado no arquivo em caso de sucesso ou FALSE em caso de falha.

fwrite (arquivo, string, comprimento):

As fwritegravações em um arquivo aberto. A função irá parar no final do arquivo ou quando atingir o comprimento especificado, o que ocorrer primeiro. Esta função retorna o número de bytes gravados ou FALSE em caso de falha.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.