Inlocuire sir in text din fisier

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
Avatar utilizator
steell
Mesaje:190

Inlocuire sir in text din fisier

Salut
Nu stiu care e problema la acest script

Cod: Selectaţi tot

$numedis = $_POST['nume'];

$ardata = file('uploads.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$nr = count($ardata);
for ($a=0; $a<$nr; $a++) {
  $ia = file_get_contents($numedis."/".$numedis.".txt");
  $rr = str_ireplace($ardata[$a],'<img src="upload/'.$ardata[$a].'" width="100" height="100" />', $ia);
  $p = file_put_contents($numedis."/".$numedis.".txt", $rr);
}
 
Fisierul "uploads.txt" contine:

Cod: Selectaţi tot

imagine1.jpg
imagine2.jpg
Sr trebui ca in fiserul:

Cod: Selectaţi tot

$numedis."/".$numedis.".txt" 
sa inlocuiasca unde scrie imagine.jpg ... cu <img src ....
Dar nu inlocuieste, ramane tot imagine.jpg .

MarPlo Mesaje:4343
Salut
Daca vrei sa modifici datele din: $numedis."/".$numedis.".txt" in functie de cele din fisierul "uploads.txt", nu are rost sa aplici file_get_contents() si file_put_contents() in codul din for(); ca asa preia si rescrie fisierul la fiecare parcurgere a instructiunii.
Preia textul din acel fisier inainte de for(), parcurgi si inlocuiesti sirul, apoi, dupa for() rescrii fisierul.
O alta gresala, $rr nu contine si pastreaza datele modificate, ci e refacut la fiecare parcurgere for().
Incearca asa:

Cod: Selectaţi tot

// daca sunt date prin POST 'nume'
if(isset($_POST['nume'])) {
  $numedis = strip_tags($_POST['nume']);    // sterge posibile tag-uri in 'nume'
  $ardata = file('uploads.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

  // daca fisierul txt respectiv exista si poate fi scris
  if(file_exists($numedis.'/'.$numedis.'.txt') && is_writable($numedis.'/'.$numedis.'.txt')) {
    $ia = file_get_contents($numedis.'/'.$numedis.'.txt');
    $nr = count($ardata);
    for($a=0; $a<$nr; $a++) {
      $ia = str_ireplace($ardata[$a], '<img src="upload/'.$ardata[$a].'" width="100" height="100" />', $ia);
    }
    file_put_contents($numedis.'/'.$numedis.'.txt', $ia);
  }
  else echo 'Fisierul: '. $numedis.'/'.$numedis.'.txt nu exista, sau nu poate fi scris.';
} 

steell Mesaje:190
tot nu functioneaza. am modificat scriptul in zeci de moduri si degeaba.
am scos for() si in uploads.txt am lasat o singura linie si am folosit $ardata[0] insa degeaba.
am folosit echo peste tot sa vad daca imi arata bine informatiile, am adaugat la file_put_contents un cuvant concatenat de sirul inlocuit sa vad daca face scrierea in fisier si am vazut ca singura linie care nu functioneaza este cea in care se face inlocuirea.

Cod: Selectaţi tot

$ia = str_ireplace($ardata[$a], '<img src="upload/'.$ardata[$a].'" width="100" height="100" />', $ia);
nu vrea sa inlocuiasca nici de nebun.

MarPlo Mesaje:4343
Explicatia ar fi ca in continutul din variabila $ia (preluat din acel fisier TXT) nu este sirul pe care vrei sa-l inlocuiesti.
Ca test, incearca sa adaugi manual /direct textul la variabila $ia, sa contina si acel sir ce trebuie inlocuitt.