ZIP-Script läuft auf Test-Server , aber nicht auf der produktiven Maschine

ahykes

Erfahrenes Mitglied
Hi!
Wie der Titel schon sagt, habe ich mir ein Script zum Zippen einer Datei / Verzeichnis gebaut. Dieses läuft aber nur auf der Testinstallation meines Servers Zunächst dachte ich es läge an irgendwelcehn fehlenden Modulen. Die Fehlermeldung im Brwoser jedoch sagt was anderes:

Parse error: syntax error, unexpected ')', expecting '(' in /homepages/38/d218015413/htdocs/CONTENTS/wtools/modules/zipobject.php on line 39

Ein Parse-Error tritt doch nicht auf wenn ein Modul fehlt oder?

Hier zunächst Zeile 35 - 45:
PHP:
	function createZIP($OBJ){
		$zip = new ZipArchive;
		$CURFILELABLE = str_replace("/","",strrchr($OBJ,"/")).".zip";
		$zip->open($CURFILELABLE, ZipArchive::CREATE);
		
		if(is_dir($OBJ)){
			zipDir($OBJ,$zip);
		}
		else {
			$zip->addFile($OBJ,$dirOBJ);
Wie kann das sein? Hier kommt das ganze Script:
PHP:
<?
	if($_SESSION['$SYSTEM_PASSED'] === false){
		header("location: index.php");
		exit;
	};
	
	$OBJECT = $_GET['OBJ'];
	
	function zipDir($SRC,$TMP){	
			$DIRHANDLE = opendir($SRC);
			
			global $OBJECT;
			$LABEL = substr($SRC,strlen($OBJECT)+1);
				
				while($dirOBJ = readdir($DIRHANDLE)){
					if($dirOBJ != '.' && $dirOBJ != '..'){
					
						if(is_dir($SRC.'/'.$dirOBJ)) {
						
							$TMP->addEmptyDir($LABEL.'/'.$dirOBJ);
							zipDir($SRC.'/'.$dirOBJ,$TMP);
							
						}
						if(is_file($SRC.'/'.$dirOBJ)) {
							
							if($LABEL && substr($LABEL,-1, 1) != '/'){
								$LABEL = $LABEL.'/';
							}
							$TMP->addFile($SRC.'/'.$dirOBJ,$LABEL.$dirOBJ);
						}
					}
				}
			closedir($DIRHANDLE);
	}
	
	function createZIP($OBJ){
		$zip = new ZipArchive;
		$CURFILELABLE = str_replace("/","",strrchr($OBJ,"/")).".zip";
		$zip->open($CURFILELABLE, ZipArchive::CREATE);
		
		if(is_dir($OBJ)){
			zipDir($OBJ,$zip);
		}
		else {
			$zip->addFile($OBJ,$dirOBJ);
		}		
		$zip->close();
		copy($CURFILELABLE,$_GET['LASTDIR'].'/'.$CURFILELABLE);
		unlink($CURFILELABLE);

	}
	
	createZIP($OBJECT);
	
	
	header("location: ../wtools.php?mode=".$_GET['nextParentMode']."&LASTDIR=".$_GET['LASTDIR']."&CURDIR=".$_GET['CURDIR']);
	exit;

?>
Hoffe, ihr könnt mir helfen.
 
Welche PHP Versionen kommen zum Einsatz?
Ist [phpf]error_reporting[/phpf] mal auf die höchste Stufe gestellt worden, um evtl. Fehler abzufangen?
 
Hallo und guten Morgen,

auf der prod. Maschine läuft die Version 4.4.8. Auf der Testmaschine läuft schon 5! Okay, verstehe worauf Du Du hinaus willst. Das Manual sagt leider nichts dazu. Habe mal geschaut: Da steht nichts davon, dass die Syntax bei 4 anders ist als bei 5!

ErrorReporting? Probier ich mal aus.
 
Ich bin mir nicht sicher, aber ich glaube, dass es in PHP 4 noch keine Klassenkonstanten gab. So erwartet der Parser, dass ZipArchive::CREATE eine Methode ist erwartet die bei Funktionen/Methoden üblichen Klammern.
 
Die Vorgänger haben Recht. Die Funktion läuft unter PHP4 (> 4.1.0) so fehlerfrei (auch wenn unschön):
PHP:
function createZIP($OBJ){
  $zip = new ZipArchive;
  $CURFILELABLE = str_replace('/', '', strrchr($OBJ, '/')) . '.zip';

  $zip->open($CURFILELABLE, 1);
        
  if(is_dir($OBJ))
    zipDir($OBJ, $zip);
  else
    $zip->addFile($OBJ, $dirOBJ);
  
  $zip->close();
  
  copy($CURFILELABLE, $_GET['LASTDIR'] . '/' . $CURFILELABLE);
  unlink($CURFILELABLE);

  return true;
}
 
Danke für den Tip!

Dafür bekomme ich aber jetzt eine neue Meldung:

Fatal error: Cannot instantiate non-existent class: ziparchive in /homepages/38/d218015413/htdocs/CONTENTS/wtools/modules/zipobject.php on line 38

Normaler Weise würde ich denken, dass das ZIP-Modul gar nicht an ist....ist aber nicht so.:suspekt:

Er stört sich also an '$zip = new ZipArchive;'

PHP:
	function createZIP($OBJ){
		$zip = new ZipArchive;
		$CURFILELABLE = str_replace("/","",strrchr($OBJ,"/")).".zip";
              $zip->open($CURFILELABLE, 1 );
		
		if(is_dir($OBJ)){
			zipDir($OBJ,$zip);
		}
		else {
			$zip->addFile($OBJ,$dirOBJ);
		}		
		$zip->close();
		copy($CURFILELABLE,$_GET['LASTDIR'].'/'.$CURFILELABLE);
		unlink($CURFILELABLE);

	}
 
Zurück