Ir para conteúdo


Foto

Substituir Texto Dentro De 1 .txt


16 respostas neste tópico

#1 GtOkAi

GtOkAi
  • Membros
  • 121 posts

Postado 29 agosto 2007 - 09:22

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?

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



#2 Lucas Phillip

Lucas Phillip
  • Veteranos
  • 675 posts
  • Gender:Male

Postado 29 agosto 2007 - 09:45

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?? biggrin.gif

tenta assim e vê se funciona:
CODE
$arquivo2 = str_replace($guildname,$nguildname, $arquivo);
        $arquivo2 = str_replace($sub1,$nsub1, $arquivo2);
        $arquivo2 = str_replace($sub2,$nsub2, $arquivo2);
         $arquivo2 = str_replace($sub3,$nsub3, $arquivo2);


#3 GtOkAi

GtOkAi
  • Membros
  • 121 posts

Postado 29 agosto 2007 - 10:33

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:
CODE
$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.

#4 MLeandroJr!

MLeandroJr!
  • Veteranos
  • 2.194 posts
  • Gender:Male
  • Location:São Paulo - SP

Postado 29 agosto 2007 - 11:03

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+ ?

 

bimcoficial.jpg

#5 GtOkAi

GtOkAi
  • Membros
  • 121 posts

Postado 29 agosto 2007 - 11:23

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?


#6 Lucas Phillip

Lucas Phillip
  • Veteranos
  • 675 posts
  • Gender:Male

Postado 29 agosto 2007 - 12:11

QUOTE(GtOkAi @ 29/08/2007 - 10:33) Visualizar 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:
CODE
$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 biggrin.gif

olha o seu e o meu pra você ver a diferença:

CODE
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

#7 GtOkAi

GtOkAi
  • Membros
  • 121 posts

Postado 29 agosto 2007 - 12:53

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

#8 Lucas Phillip

Lucas Phillip
  • Veteranos
  • 675 posts
  • Gender:Male

Postado 29 agosto 2007 - 15:10

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:

CODE
<?
        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, 29 agosto 2007 - 15:12 .


#9 GtOkAi

GtOkAi
  • Membros
  • 121 posts

Postado 29 agosto 2007 - 15:58

Lucas Phillip, novamente obrigado por estar ajudando;
este script conseguiu dar replace, porem, ele duplica todo conteúdo de dentro do guild.txt...

#10 MLeandroJr!

MLeandroJr!
  • Veteranos
  • 2.194 posts
  • Gender:Male
  • Location:São Paulo - SP

Postado 29 agosto 2007 - 16:08

Tente utilizar o w+ agora.
Este truncará o arquivo, com certeza acabará repondo o conteúdo.

 

bimcoficial.jpg

#11 GtOkAi

GtOkAi
  • Membros
  • 121 posts

Postado 29 agosto 2007 - 16:17

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


#12 MLeandroJr!

MLeandroJr!
  • Veteranos
  • 2.194 posts
  • Gender:Male
  • Location:São Paulo - SP

Postado 29 agosto 2007 - 16:20

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

 

bimcoficial.jpg

#13 GtOkAi

GtOkAi
  • Membros
  • 121 posts

Postado 29 agosto 2007 - 16:22

hm... então seria usar
$deletar = substr($arquivo,0,$tamanho);
como posso fazer para ler caracteres totais? assim duplica e deleta a primeira parte

#14 Lucas Phillip

Lucas Phillip
  • Veteranos
  • 675 posts
  • Gender:Male

Postado 29 agosto 2007 - 17:04

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.gif

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:

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


acho que assim deve dar ph34r.gif

falou

#15 GtOkAi

GtOkAi
  • Membros
  • 121 posts

Postado 29 agosto 2007 - 17:15

opa consegui... ^^
CODE
$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

#16 Lucas Phillip

Lucas Phillip
  • Veteranos
  • 675 posts
  • Gender:Male

Postado 29 agosto 2007 - 17:21

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

#17 GtOkAi

GtOkAi
  • Membros
  • 121 posts

Postado 29 agosto 2007 - 17:50

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



Responder



  


0 usuário(s) está(ão) lendo este tópico

0 membros, 0 visitantes, 0 membros anônimos