Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem PHP - při zápisu dat do souboru, přidá prázdný řádek.

Ahoj,
řeším doufám že maličkost. Mám to trochu složitější a nechce se mi sem dávat všechny scripty, atd. Ale třeba bude stačit jen kousek. Mám kód kterým ukládám proměnou, která je složena z více proměnných, do souboru který neexistuje, ale vytvoří se, je soubor .cgi vlastně ho beru jako csv. Ale při uložení mi ty data hodí na jeden řádek, to je OK, ale když dám šipku dolů (v editaci toho souboru) tak je tam další řádek (prázdný), ten mi pak zobrazuje prázdnou buňku v table, když jej pomocí while a fgets zobrazuji.
Ten kód:

$fp = FOpen ("soubor.cgi", "w"); 
FWrite ($fp, $write); 
FClose ($fp);

A kód na zobrazování:

$soubor1=fopen("soubor.cgi", "r");     
	while (!feof($soubor1)){ 	
		$radek = fgets($soubor1,5000); 
			$radek2 = str_replace(';','</td><td>',$radek);
      $radek3 = str_replace('"'," ",$radek2); 	
      $novy = ('<tr align="center"><td>'.$radek3.'</td></tr>');	
      echo $novy;
	}
echo ('</table>');

Já nevím co mám dělat. Kdyžtak více vysvětlím.

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Prečítaj si dokumentáciu k funkciám feof a fgets, aby si ich používal správne. Pretože kým si nenačí… nový
los 28.05.2014 08:27
los
Jo to jsem četl, základ jsem pochopil, ale co víc se s tím dá dělat, nějak nevím, třeba fgets přečte… poslední
Vlk89 28.05.2014 12:31
Vlk89

Prečítaj si dokumentáciu k funkciám feof a fgets, aby si ich používal správne. Pretože kým si nenačítal koniec súboru cez fgets, tak feof ti vráti FALSE. Ten kód by mohol vyzerať skôr nejako takto (nepotrebuješ ani použiť feof):

while (($radek = fgets($soubor, 5000)) !== FALSE) {
	...
}

Pokiaľ ale máš v súbore ten prázdny riadok naozaj zapísaný, tak sa pozri aj na to, čo máš v premennej $write. Ináč na takéto jednoduché veci by som skôr použil file_get_contents a file_put_contents, ktoré prečíta/zapíše celý súbor naraz.

Jo to jsem četl, základ jsem pochopil, ale co víc se s tím dá dělat, nějak nevím, třeba fgets přečte řádek, while to opakuje, !==FALSE to znamená asi že když dojede na konec souboru (textu) tak fgets hodí False a while skončí, je to tak nějak?

Kód jsem zkusil a je to super, ale nechápu jak může rozdělit z jednoho řádku od sebe jednotlivá data? Teď mám kód:

while (($radek = fgets($soubor, 5000)) !== FALSE) {		  			
$radek2 = str_replace(";","</td><td>",$radek);
$radek3 = str_replace('"',"",$radek2);
$novy = ('<tr align="center"><td>'.$radek3.'</td></tr>');
echo $novy;
}

Když na zkoušku oddělám nahrazení středníku těma tagama pro tabulku, tak se samozdřejmě rozhodí, ale proč, jedině, že nějak pozná že právě chci udělat řádky, no nechápu to :-)

V proměnné $write mám jen data, které mi script oddělí středníkem, a když dám echo hned pod proměnnou $write, tak mi to zobrazí správně, ale do souboru se uloží řádek navíc a ještě k tomu $data2 s uvozovkama. I když dám jen čistě, půl kódu viz. dole, uložení jenom samotného $write do souboru který zrovna i vytvoří.

define('S', ";");
$write = $data1.S.$data2.S.$data3.S.$data4; 

if (file_exists ("soubor.cgi")){
$fp = fopen ("soubor.cgi", "r");
$data = fread ($fp, filesize("soubor.cgi"));
fclose($fp);
}
$fp = fopen ("soubor.cgi", "w");
fwrite ($fp, $data.$write); 
fclose ($fp); 

No a používám fopen, fread a fwrite, protože soubor se musí vytvořit sám v tomto scriptu, do té doby neexistuje.

Zpět do poradny Odpovědět na původní otázku Nahoru