Newsgroup: it.comp.www.php
Titolo: Scrivere file binario

Ho un file binario (archivio.dat) dal quale, tramite il codice sottostante, 
creo un array del tipo $arc[5000][10][5]
e finora va bene :)
vorrei sapere come si ottiene il procedimento inverso. Cioč...ho in memoria 
un array come quello di sopra e voglio salvarlo in un file binario.
Mi aiutate per favore?
--------------------------------------
$x1=0;
$x2=0;
$x3=1;
$ultima=0;
$fp = fopen("../archivio.dat", 'r');
while (!feof($fp))
 {
 $x1=$x1+1;
 if($x1>5000)
  {
  $x1=1;
  $x2=$x2+1;
  if($x2>10)
   {
   $x2=0;
   $x3=$x3+1;
   }
  }
  $arc[$x1][$x2][$x3]=ord(fread($fp, 1));
} 

 ha scritto nel messaggio 
news:454e746f$0$7629$4faf...@reader1.news.tin.it...
Scusate...
Sono OT?
Può darsi che non sia stato felice nell'esprimermi.
Sapreste indicarmi come salvare il contenuto di un array in un file binario?
Grazie

 Sapreste indicarmi come salvare il contenuto di un array in un file binario?
Se ti va bene anche un file di testo, usa serialize(), scrivi sul file e
poi quando lo leggi usi unserialize()
Bye.

 ha scritto nel messaggio 
news:4rb1g1F...@individual.net...

*****
Purtroppo il file deve essere binario.
Qui di seguito ti faccio vedere un esperimento.
Leggo un file binario
metto i dati di questo file in un array
cambio un elemento dell'array
salvo il file.
Risultato???
Invece che un file binario da 269 Kb me ne esce uno (credo di testo) con su 
scritto esclusivamente ARRAY.
<?php
$x1=0;
$x2=0;
$x3=1;
$ultima=0;
$fp = fopen("archivio2.dat", 'r');
while (!feof($fp))
 {
 $x1=$x1+1;
 if($x1>5000)
  {
  $x1=1;
  $x2=$x2+1;
  if($x2>10)
   {
   $x2=0;
   $x3=$x3+1;
   }
  }
 //echo ord(fread($fp, 1)), ' ';
 $arc[$x1][$x2][$x3]=ord(fread($fp, 1));
}
fclose($fp);
$arc[1][0][1] = "04";
$dati = $arc;
$file = fopen("archivio2.dat", 'r+b'); // binary update mode
rewind($file);
fwrite($file, $dati);
fflush($file);
ftruncate($file, ftell($file));
fclose($file);
?> 

scritto esclusivamente ARRAY.
Quando lo scrivi, devi usare la stessa routine (be', a rovescio) che hai
usato per leggerlo, e che mi guardo bene dal garantire che sia questa:
$fp = fopen('archivio2.dat', 'r+b'); // binary update mode
for ($x = 1; $x <= count($dati); $x++)
{
	for ($z = 1; $z <= 10; $z++)
	{
		// Forse si potrebbe usare pack(). Guarda sul manuale...
		// ...magari riordinando le coordinate di $arc?
		for ($x = 1; $x <= 5000; $x++)
		{
			fwrite($fp, chr($arc[$x][$y][$z]));
		}
	}
}
fclose($fp);
Leonardo SE&O
-- 
Dawn is near, the time is short (Human aircraft! Hard to port!)
We eight reindeers of the night work as one in silent flight.
Let not one damn house pass by (Who taught that guy how to fly?)
Each year sees more girls and boys: how many of them can we bring toys?

 ha scritto nel messaggio 
news:rrt0l2peqsfjejsj3...@4ax.com...
Grazie a te ho risolto. Ho modificato però il codice. Ecco:
<?php
$x1=0;
$x2=0;
$x3=1;
$ultima=0;
$fp = fopen("archivio2.dat", 'r');
while (!feof($fp))
 {
 $x1=$x1+1;
 if($x1>5000)
  {
  $x1=1;
  $x2=$x2+1;
  if($x2>10)
   {
   $x2=0;
   $x3=$x3+1;
   }
  }
 //echo ord(fread($fp, 1)), ' ';
 $arc[$x1][$x2][$x3]=ord(fread($fp, 1));
}
fclose($fp);
$arc[1][0][1] = "04";
$fp = fopen('archivio2.dat', 'r+b'); // binary update mode
$x1=0;
$x2=0;
$x3=1;
while($xxx<275000)//perché in tutto le operazioni sono 275000
{
$xxx = $xxx + 1;
 $x1=$x1+1;
 if($x1>5000)
  {
  $x1=1;
  $x2=$x2+1;
  if($x2>10)
   {
   $x2=0;
   $x3=$x3+1;
   }
  }
fwrite($fp, chr($arc[$x1][$x2][$x3]));
}
fclose($fp);
?>