Entre para seguir isso  
Seguidores 0

Substituir Texto Dentro De 1 .txt

17 posts neste tópico

Postado · Denunciar post

Bom... ontem estava com 1 dúvida mais já resolvi, agora estou com outra, estou tentando fazer substituir por exemplo TESTE1 por TESTE2 dentro do arquivo test.txt, ... para isso estou usando str_replace mais não está funcionando, tem algo de errado com script? ou estou usando function errada?

<?
        if($_POST){
        $guildname = $_POST['guildname'];
        $nguildname = $_POST['nguildname'];
        $sub1 = $_POST['sub1'];
        $sub2 = $_POST['sub2'];
        $sub3 = $_POST['sub3'];
        $nsub1 = $_POST['nsub1'];
        $nsub2 = $_POST['nsub2'];
        $nsub3 = $_POST['nsub3'];
        ob_start();
        $arquivo = fopen("C:\\guilds.txt",'a');
        if (!$arquivo){
        echo "erro";
        exit;
        }
        $arquivo2 = str_replace($guildname,$nguildname, $arquivo2);
        $arquivo2 = str_replace($sub1,$nsub1, $arquivo2);
         $arquivo2 = str_replace($sub2,$nsub2, $arquivo2);
         $arquivo2 = str_replace($sub3,$nsub3, $arquivo2);
        fwrite($arquivo,"$arquivo2\r\n");
        fclose($arquivo);
        @header("Location: enviado.php");
        } else {
        echo("test");
        }
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Postado · Denunciar post

Aew, to na facu então só dei uma olhada rápida, mas vê se o problema é esse:

quando você declara $arquivo2 pela 1 vez e utiliza str_replace, você deveria utilizar $arquivo, e não $arquivo2 na váriavel que você vai substituir. porque do jeito que está, você está utilizando str_replace no próprio $arquivo2, só que ela não existe ainda.

entendeu?? :D

tenta assim e vê se funciona:

$arquivo2 = str_replace($guildname,$nguildname, $arquivo);
        $arquivo2 = str_replace($sub1,$nsub1, $arquivo2);
        $arquivo2 = str_replace($sub2,$nsub2, $arquivo2);
         $arquivo2 = str_replace($sub3,$nsub3, $arquivo2);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Postado · Denunciar post

Olá Lucas, eu declarei como você disse como $arquivo ao invés de $arquivo2, só que ainda não substituiu ^^

também tentei desse jeito:

$arquivo2 = str_replace($guildname,$nguildname, $arquivo);
        $arquivo2 = str_replace($sub1,$nsub1, $arquivo);
        $arquivo2 = str_replace($sub2,$nsub2, $arquivo);
        $arquivo2 = str_replace($sub3,$nsub3, $arquivo);

declarando $arquivo em todas, e assim também não substituiu.

isso não estaria no lugar errado? ou a linha do fwrite?

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Postado · Denunciar post

Dê uma olhada na documentação do PHP, o que diz sobre a função fopen().

 
'r'Abre somente leitura; coloca o ponteiro do arquico no começo do arquivo.
'r+'Abre para leitura e escrita; coloca o ponteiro do arquivo no começo do arquivo.
'w'Abre para escrita somente; coloca o ponteiro do arquivo no começo do arquivo e diminui (trunca) o tamanho do arquivo para zero. Se o arquivo não existe, tenta criá-lo.
'w+'Abre o arquivo para leitura e escrita; coloca o ponteiro do arquivo no começo e diminui (trunca) o tamanho do arquivo para zero. Se o arquivo não existe, tenta criá-lo.
'a'Abre para escrita somente; coloca o ponteiro do arquivo no final. Se o arquivo não existe, tenta criá-lo.
'a+'Abre o arquivo para leitura e escrita; coloca o ponteiro do arquivo no final. Se o arquivo não existe, tenta criá-lo.
'x'Cria e abre o arquivo para escrita somente; coloca o ponteiro no início do arquivo. Se o arquivo já existe, a chamada a fopen() irá falhar, retornando FALSE e gerando um erro nível E_WARNING. Se o arquivo não existe, tenta criá-lo. Isto é o equivalente a informar as flags O_EXCL|O_CREAT numa chamada a open(2). Esta opção é suportada no PHP 4.3.2 e posteriores, e somente funciona em arquivos locais.
'x+'Cria e abre um arquivo para escrita e leitura; coloca o ponteiro do arquivo no início. Se o arquivo já existe, a chamada a fopen() irá falhar, retornando FALSE e gerando um erro nível E_WARNING. Se o arquivo não existe, tenta criá-lo. Isto é o equivalente a informar as flags O_EXCL|O_CREAT numa chamada a open(2). Esta opção é suportada no PHP 4.3.2 e posteriores, e somente funciona em arquivos locais.

Não seria o caso de utilizar w+ ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Postado · Denunciar post

usando o w+, não substituiu.. deixou o arquivo .txt vazio.

então o problema não seria no str_replace();? usar outra função?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Postado · Denunciar post

Olá Lucas, eu declarei como você disse como $arquivo ao invés de $arquivo2, só que ainda não substituiu ^^

também tentei desse jeito:

$arquivo2 = str_replace($guildname,$nguildname, $arquivo);
        $arquivo2 = str_replace($sub1,$nsub1, $arquivo);
        $arquivo2 = str_replace($sub2,$nsub2, $arquivo);
        $arquivo2 = str_replace($sub3,$nsub3, $arquivo);
declarando $arquivo em todas, e assim também não substituiu. isso não estaria no lugar errado? ou a linha do fwrite? Obrigado.
Aew.. eu não falei pra utilizar $arquivo em todas... era pra usar só na 1 :D olha o seu e o meu pra você ver a diferença:
seu:
$arquivo2 = str_replace($guildname,$nguildname, $arquivo);
$arquivo2 = str_replace($sub1,$nsub1, $arquivo);
$arquivo2 = str_replace($sub2,$nsub2, $arquivo);
$arquivo2 = str_replace($sub3,$nsub3, $arquivo);

meu:
$arquivo2 = str_replace($guildname,$nguildname, $arquivo);
$arquivo2 = str_replace($sub1,$nsub1, $arquivo2);
$arquivo2 = str_replace($sub2,$nsub2, $arquivo2);
$arquivo2 = str_replace($sub3,$nsub3, $arquivo2);

falou

Compartilhar este post


Link para o post
Compartilhar em outros sites

Postado · Denunciar post

Lucas Phillip, sim, eu tinha tentando dos 2 jeitos.. incluindo o que você me disse, nenhum funcionou.. mesmo substituindo o a para w+.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Postado (editado) · Denunciar post

Aew... outra coisa então... você manda abrir o arquivo, mas você não lê o que está no arquivo. Utilize o comando fread para fazer isso...

ve se assim vai funcionar:

<?
        if($_POST){
        $guildname = $_POST['guildname'];
        $nguildname = $_POST['nguildname'];
        $sub1 = $_POST['sub1'];
        $sub2 = $_POST['sub2'];
        $sub3 = $_POST['sub3'];
        $nsub1 = $_POST['nsub1'];
        $nsub2 = $_POST['nsub2'];
        $nsub3 = $_POST['nsub3'];
        ob_start();
    $filename = "C:\\guilds.txt";
        $open = fopen($filename,'r+');
    $arquivo = fread($open, filesize($filename));        
        if (!$arquivo){
        echo "erro";
        exit;
        }
        $arquivo2 = str_replace($guildname,$nguildname, $arquivo);
        $arquivo2 = str_replace($sub1,$nsub1, $arquivo2);
        $arquivo2 = str_replace($sub2,$nsub2, $arquivo2);
        $arquivo2 = str_replace($sub3,$nsub3, $arquivo2);
        fwrite($open,"$arquivo2\r\n");
        fclose($open);
        @header("Location: enviado.php");
        } else {
        echo("test");
        }
?>

obs: eu não testei... mas testa ai e se não funcionar tenta arrumar o q está errado..

falou

Editado por Lucas Phillip

Compartilhar este post


Link para o post
Compartilhar em outros sites

Postado · Denunciar post

Lucas Phillip, novamente obrigado por estar ajudando;

este script conseguiu dar replace, porem, ele duplica todo conteúdo de dentro do guild.txt...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Postado · Denunciar post

Tente utilizar o w+ agora.

Este truncará o arquivo, com certeza acabará repondo o conteúdo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Postado · Denunciar post

Lvcifer!, utilizando o W+, faz dar erro no fread porque antes de escrever retorna o tamanho do arquivo a 0...

Warning: fread() [function.fread]: Length parameter must be greater than 0 in C:\AppServ33\www\guildmark_register.php on line 27

erro

Compartilhar este post


Link para o post
Compartilhar em outros sites

Postado · Denunciar post

O jeito então é utilizar o 'r+' e arrumar alguma forma de o PHP apagar o resto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Postado · Denunciar post

hm... então seria usar

$deletar = substr($arquivo,0,$tamanho);

como posso fazer para ler caracteres totais? assim duplica e deleta a primeira parte

Compartilhar este post


Link para o post
Compartilhar em outros sites

Postado · Denunciar post

bom.. o comando "filesize" retorna erro se o arquivo não existe ou seu tamanho é 0. Quando você abre o arquivo com w+, você limpa o arquivo e ele fica com 0 de tamanho, e o comando filesize só é executado depois disso. :blink:

faz o seguinte... abre o arquivo com w+, mas coloca o comando filezise fora do fread, e antes do fopen.. ai deve resolver seu problema... algo assim:

+- assim:

$filename = "C:\\guilds.txt";
$size = filesize($filename);
$open = fopen($filename,'w+');
$arquivo = fread($open, $size);

acho que assim deve dar :ph34r:

falou

Compartilhar este post


Link para o post
Compartilhar em outros sites

Postado · Denunciar post

opa consegui... ^^

$open = fopen($filename,'r');
        $arquivo = fread($open, filesize($filename));
        $open = fopen($filename,'w+');

foi jogar o $open com r.... depois de dar o fread botar o $open dessa vez com w+...

Obrigado ai pelo suporte,

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Postado · Denunciar post

que bom que você conseguiu.

Só uma coisa. Da uma lida no post que eu escrevi antes do seu, pra você evitar de ter q abrir o arquivo 2 vezes.

Boa sorte.

falou

Compartilhar este post


Link para o post
Compartilhar em outros sites

Postado · Denunciar post

sim, me baseei nele, mias só funciono abrindo o arquivo 2x...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!


Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.


Entrar Agora
Entre para seguir isso  
Seguidores 0