17.Jan 2007
Gleichzeitiger Schreibzugriff auf eine Datei

Das Beschreiben z.B einer Logdatei mit einer in PHP geschriebenen Webanwendung ist nicht ungefährlich: tritt dabei eine race condition auf, kann auch eine mit flock() blockierte Datei leicht zerstoert werden. Die Lösung dieses Problems läuft über eine zusätzliche angelegten Lock-Datei:

function logData( $filename, $data )
{
  $lockhandle = fopen( $filename . ".lock", "w" );
		
  if( flock( $lockhandle, LOCK_EX + LOCK_NB ) ) {
    $filehandle = fopen( $filename, "a+" );
    fwrite( $filehandle, $data );
    fclose( $filehandle );
		
    flock( $lockhandle, LOCK_UN );
    fclose( $lockhandle );
		
    return true;
  }

  return false;
}

7.Jan 2007
Rastervögel

Rangezoomte Animation von zwei Vögeln mit Javascript:


5.Jan 2007
Upload mehrerer Dateien gleichzeitig

Zum Upload mehrerer Dateien mittels PHP eignet sich deren Angabe als Feld („file[]„). Der Aufbau ist etwas unerwartet – dieses Minimalbeispiel sollte die Funktionalität ausreichend erklären:

<html>
<?php
define( "DIR", "x:/" );

for( $i = 0; $i < count( $_FILES["file"]["tmp_name"] ); $i++ )
  if ( is_uploaded_file( $_FILES["file"]["tmp_name"][$i]) )
    move_uploaded_file( 
      $_FILES["file"]["tmp_name"][$i],
      DIR . $_FILES["file"]["name"][$i] 
    );
?>
<body>
  <form method="post" enctype="multipart/form-data">
    <input name="file[]" type="file" /><br />
    <input name="file[]" type="file" /><br />
    <input name="file[]" type="file" /><br />
    <input type="submit" />
  </form>
</body>
</html>

18.Dez 2006
Dateien downloaden statt anzeigen

Manchmal möchte man Dateien lieber direkt zum Download anbieten, statt diese im Webbrowser anzeigen zu lassen. Für diesen Fall muß man den Mime-Typen auf application/octet-stream einstellen. Das läßt sich entweder durch ein AddType oder durch folgende Zeilen in der .htaccess bewerkstelligen (im Beispiel für .asc und .pdf-Dateien):

<FilesMatch "\.(asc|pdf)$">
ForceType application/octet-stream
</FilesMatch>

18.Nov 2006
Rewrite von PHP-Dateien

Wenn man PHP-Dateien als HTML-Dateien aufrufen möchte, wirkliche HTML-Dateien dabei aber nicht durch den PHP-Interpreter verlangsamt werden sollen, kann man die .htaccess um folgende MOD_REWRITE Befehle erweitern:


RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule (.+)\.html$ $1.php [L]

15.Nov 2006
Mausrad mit Javascript abfragen


function handle( delta ) { alert( delta ); }

function mousewheel( event ) {

  var delta = 0;

  if ( !event )
    event = window.event;
  
  if ( event.wheelDelta ) { // IE
    delta = event.wheelDelta / 120;
 
    if ( window.opera ) // Opera
      delta = -delta;
  } else if ( event.detail ) { // Mozilla
    delta = -event.detail / 3;
  }
 
  if ( delta ) handle(delta);

  if ( event.preventDefault )
    event.preventDefault();
  
  event.returnValue = false;
}

if (window.addEventListener) // Mozilla
  window.addEventListener('DOMMouseScroll', mousewheel, false);
	
window.onmousewheel = document.onmousewheel = mousewheel;