php.hr
Dobrodošli, Gost. Molimo, prijavite se ili se registrirajte.
17.06.2021., 08:13
1878 Postova 1000 Tema 442 Članova
Najnoviji Član: medolino
php.hr  |  PHP & MySQL  |  PHP  |  array overflow « natrag naprijed »
 Str: [1]
Autor Tema: array overflow  (Posjeta: 2398 )
deamon
Novi član
*
Offline Offline

Spol: Muški
Postova: 1


Profil
« : 13.01.2007., 00:00 »

Radim program koji sadrzaj txt filea kopira u polje, svaki element polja je jedna linija tog txt filea i zatim sadrzaj tog polja nasumicnim redoslijedom sprema u neki html file. Kako to radim sa velikim brojem fileova, nisu mi svi fileovi jednake duzine. Kako ta nasumicna spremanja stavljam na odredeni dio html filea, ne mogu kopirati cijeli file, nego dio po dio. Problem je u tome sto mi se rijeci u nekim fileovima mijesaju na nacin da u jedan html dospiju rijeci iz dva txt filea, sto nikako ne smije. Ja osobno smatram da mi u tom polju (koje se zove $elementi) u koje spremam sadrzaj txt filea  ostane rijeci od prethodne obrade (od prethodnog txt filea), posto mi je sve ostalo u redu (petlje, brojaci itd.). Probao sam to rijesiti sa funkcijom flush ali bezuspjesno. Ima li tko kakvu ideju? Evo kod, ovo je glavni dio programa, cijeli je predug:

Kod: (php)
$file = "imena.txt"; // datoteku imena.txt se sprema u $file
$fp = fopen($file, "r") or die("Greska pri otvaranju imena.txt!");  /* imena.txt se otvaraju za citanje */
$vri = file($file);  // sadrzaj imena.txt se sprema u polje $vri na nacin 1 elem. polja = 1 red
$lines = array_reverse($vri); // 1. red u imena.txt = $lines[0]
$i = sizeof($lines);

//SADA SE DODAJE SVAKOM REDU LISTE "IMENA.TXT" NASTAVAK .TXT
$imena = file("./imena.txt"); // datoteku imena.txt se sprema u $imena
$brojac=0;
foreach($imena as $ime) { // za svaki element iz $imena
$novi_niz[$brojac] = trim($ime) . ".txt"; //dodaje se nastavak .txt
$brojac++;
}
$rev_niz = array_reverse($novi_niz);  /* $rev_niz[0] = $imena[0].txt, sada se u polju $rev_niz nalaze
vrijednosti iz imena.txt sa nadodanim nastavkom .txt */

//SADA DODAJE CLANU LISTE "IMENA.TXT" NASTAVAK .html
$imena2 = file("./imena.txt");
$brojac2=0;
foreach($imena2 as $ime) {
$novi_niz2[$brojac2] = trim($ime) . ".html";
$brojac2++;
}
$rev_niz2 = array_reverse($novi_niz2);  /* $rev_niz2[0] = $imena2[0].html, sada se u polju $rev_niz2 nalaze vrijednosti iz imena.txt sa nadodanim nastavkom .html */

// GLAVNA PETLJA 
$j = 0;                                     
while($j<=$i){  //petlja se vrti za svaki redak u imena.txt, $i= broju redaka u imena.txt             
$file2 = $rev_niz[$j];  /* $file2 je jednak retku iz imena.txt sa dodanim nastavkom .txt   */       
$file3 = $rev_niz2[$j]; /* $file3 je jednak retku iz imena.txt sa dodanim nastavkom .html  */
$fp2 = fopen($file2, "r") or die("Greska pri otvaranju $file2!!"); /*otvara se file (jednakog imena kao redak koji obradujemo iz "imena.txt") za citanje */
$elementi = file($file2); /* u polje $elementi se sprema sadrzaj filea (jednakog imena kao redak koji obradujemo iz "imena.txt") na nacin 1 red = 1 element polja */
$broj_elementi = sizeof($elementi); /* brojac $broj_elementi se postavlja na vrijednost koliko ima redaka u fileu (jednakog imena kao redak koji obradujemo iz "imena.txt")*/

// SLUCAJNI ODABIR PRVIH 10 REDAKA ;
if ($broj_elementi < 10) {  /* ako file (jednakog imena kao redak koji obradujemo iz "imena.txt") ima manje od 10 redaka */
$f = $broj_elementi;}
else { $f = 10;}
for($brojac_elementi_0_10 = 0; $brojac_elementi_0_10 < $f; $brojac_elementi_0_10++) {
$prvih_10[$brojac_elementi_0_10] = $elementi[$brojac_elementi_0_10]; /* prvih 10 redaka filea (jednakog imena kao redak koji obradujemo iz "imena.txt") se spremaju u polje $prvih_10 */
}
srand ((float) microtime() * 10000000);
$prvih_10_random = array_rand($prvih_10,$f); /* odreduje se slucajni razmjestaj elemenata u polju od 10 brojeva (od 0 do 9) */
for($z = 0; $z < $f; $z++) {
$niz_prvih_10_random[$z] = $prvih_10[$prvih_10_random[$z]];  /* prvih 10 redaka iz filea (jednakog imena kao redak koji obradujemo iz "imena.txt") se spremaju random u polje $niz_prvih_10_random */
fwrite ($fp3, $niz_prvih_10_random[$z]); // upis u .html file
}

// SLUCAJNI ODABIR SVIH REDAKA ;
for($brojac_elementi_0_sve = 0; $brojac_elementi_0_sve < $broj_elementi; $brojac_elementi_0_sve++) {
$svi_elementi[$brojac_elementi_0_sve] = $elementi[$brojac_elementi_0_sve];
}
srand ((float) microtime() * 10000000);
$svi_elementi_random = array_rand($svi_elementi, $broj_elementi);
for($brojac_elementi_0_sve2 = 0; $brojac_elementi_0_sve2 < $broj_elementi; $brojac_elementi_0_sve2++) {
$niz_svi_elementi_random[$brojac_elementi_0_sve2] = $svi_elementi[$svi_elementi_random[$brojac_elementi_0_sve2]]; 
fwrite ($fp3, $niz_svi_elementi_random[$brojac_elementi_0_sve2]);
}

fclose($fp2);
fclose($fp3);
$j++;
}

fclose($fp);

Mozda i nije tu greska, to je samo moja pretpostavka!
« Zadnja izmjena: 13.01.2007., 01:45 ttc » Evidentirano
 Str: [1]
php.hr  |  PHP & MySQL  |  PHP  |  array overflow « natrag naprijed »
    Skoči na: