Dateien verändern

Hi,
ich will eine datei (.pnm) öffnen und in diese alle hex werte AA in 00 ändern. Nur irgenwie will es nicht so. Wo liegt mein fehler? bzw. wie kann ich es realisieren?

PHP:
<?
function string2hex($str)
{
  if (trim($str)!="")
  {
    $hex="";
    $length=strlen($str);
    for ($i=0; $i<$length; $i++)
    {
      if ($i>0) $bound="-"; else $bound="";
      $hex.=$bound.str_pad(dechex(ord($str[$i])), 2, 0, STR_PAD_LEFT);
    }
    return $hex;
  }
}

function hex2str($hex)
{
  for($i=0;$i<strlen($hex);$i+=2)
  {
    $str.=chr(hexdec(substr($hex,$i,2)));
  }
  return $str;
}

$f = fopen("tmp.pnm","w+");
 $f1 = fgets($f,1024);
 $f1 = string2hex($f1);
   ereg_replace("AA", "00", $f1);
   rewind($f);
   $f1 = hex2str($f1);
 fwrite($f, $f1);
fclose($f);
 
ereg_replace erwartet einen Regex.

Ansonsten guck mal ob die Funktionen Hex2string bzw. String2Hex den erwünschten Rückgabewert liefern.
 
Nein, man kann ereg_replace auch mit Strings verwenden, jedoch würde ich die Funktion preg_replace vorziehen, da sie um einiges schneller ist. Sonst wäre noch sinnvoll zu erfahren was nicht funktioniert, also ob nur einige Zeichen geändert werden, sich nichts tut, er nicht konvertiert etc.
 
hmmm, also es sind mehrere sachen, die du mal überprüfen solltest. zum einen setzt w+ bei fopen die dateilänge wohl auf 0 byte was ein möglicher grund sein könnte.
das nächste ist, dass man bei binärdateien (um solche scheint es sich ja zu handeln wenn ich dich richtig verstehe) nicht fgets nehmen soll sondern fread und fwrite

vielleicht hilft dir das ja bei der fehlersuche
 
thx mit fread gehts schon viel besser. Klappt jetzt alles wie gewollt.

PHP:
$f = fopen("tmp.pnm","r+");
$f1 = fread($f, 3613);
$f1 = string2hex($f1);

$f1 = ereg_replace("aa", "00", $f1);
   echo $f1;
$f1 = hex2str($f1);

  fclose($f);
  
$o = fopen("tmp1.pnm","w+");
   fwrite($o, $f1 );
fclose($o);
 
Zurück
Oben