[PHP] Verbotene Funktionen im SAFE MODE -> Workarround

Dieses Thema [PHP] Verbotene Funktionen im SAFE MODE -> Workarround im Forum "Webentwicklung, Hosting & Programmierung" wurde erstellt von JediMB, 16. Feb. 2006.

Thema: [PHP] Verbotene Funktionen im SAFE MODE -> Workarround Hallo zusammen! Ich habe nun den Schritt gewagt, mit meiner Homepage von kostenlosem Webspace zu einem...

  1. Hallo zusammen!

    Ich habe nun den Schritt gewagt, mit meiner Homepage von kostenlosem Webspace zu einem kommerziellen Provider umzuziehen.

    Leider habe ich erst hinterher festgestellt, dass die Server in meinem Tarif im PHP Safe Mode betrieben werden. Das bedeutet, dass verschiedene Funktionen gesperrt bzw. nur sehr eingeschränkt nutzbar sind.

    Mein Website nutz allerdings verschiedene dieser Funktionen, um Fotogalerien zu erstellen und automatisch Thumbnails zu generieren.

    Providerseitig könnte dies zwar umgestellt werden, allerdings wäre das nur mit dem Wechsel in einen deutlich teureren Professional-Tarif möglich.

    Nun habe ich mich daran gemacht, die entsprechenden gesperrten Funktionen einmal mit dem einzigen, mir bekannten Workarround nachzubauen: FTP


    Das ganze funktioniert bisher auch sehr gut, die Basics habe ich schon erfolgreich nachgebaut (MKDIR, MOVE_UPLOADED_FILE, etc.).

    Nun zu meiner Frage:

    Bei den Resample-Funktionen habe ich hierbei allerdings noch Probleme. Ich nutze die Funktion imagejpeg(), um die verkleinerten Bilder zu speichern. Allerdings habe ich die Image-Funktionen von PHP ohnehin nur so halb verstanden und weiß daher nicht, wie ich das ganze per FTP realisieren soll.
    Interessant wäre hier zu wissen, an welcher Stelle ich welches Datenformat habe (einen Byte-Stream, einen File-Pointer oder gar eine fertige Datei?) und wo ich da mit den PHP-FTP-Funktionen am besten ansetze und diesen Byte-Stream oder diese Datei abgreifen kann, um sie dann per FTP auf dem Server zu speichern.
    Es wäre daher sehr hilfreich, wenn mir jemand beim Verständnis der Image-Funktionen helfen könnte und ggf. auch noch einen passenden Tipp für den FTP Einstiegspunkt parat hätte...

    Hier mal auszugsweise der Code meiner Resample-Funktion:
    Code:
        $img_src=imagecreatefromjpeg($g_srcfile); //Bild in eine Variable holen
        $img_dst=imagecreatetruecolor($g_iw,$g_ih); //Variable für neues Bild erstellen
        imagecopyresampled($img_dst, $img_src, 0, 0, 0, 0, $g_iw, $g_ih, $g_is[0], $g_is[1]); //Bild resamplen und in die neue Bildvariable schieben
        imagejpeg($img_dst, $g_dstfile,$g_imgcomp); //Bild aus der Variable auf Platte schreiben
        imagedestroy($img_dst); //Variable exekutieren
    Bester Ansatzpunkt ist wahrscheinlich die imagejpeg()-Funktion, oder?
    Evtl so:
    Code:
    imagecopyresampled($img_dst, $img_src, 0, 0, 0, 0, $g_iw, $g_ih, $g_is[0], $g_is[1]); //Bild resamplen 
    ftp_fput($ftp_connection, $targetname, $img_dst, FTP_ASCII) // Bild per FTP speichern

    MfG & Danke schon im Voraus!
     
  2. Hallo,

    der save-Mode in php bedeutet, dass das Script nur jene Datei bearbeiten kann, dessen User es auch ist.

    mir ist noch nicht ganz klar, was du mit ftp-Funktionen machst. hilfreich wäre, wenn du den Funktionsaufruf postest, bei dem es zu der Fehlermeldung kommt. Steht in der Warnig wirklich auch SAFE MODE Restriction in effect. oder etwas anderes. Das Problem könnte auch an den Rechten liegen

    lg
     
  3. Hallo!

    Das Problem lag tatsächlich am SAFE MODE und ja, die Meldung bezog sich auch hierauf! Die SAFE MODE Manual habe ich auch schon gelesen und mich mit->nem Stapel Quellen zu dem Thema auseinander gesetzt.

    Gelöst habe ich das ganze nun wie folgt:

    • [li]Die geblockten Funktionen durch FTP-Funktionen ersetzt (Code siehe unten)[/li]
      [li]Da ftp_chmod() erst ab PHP 5 zur Verfügung steht, diese Funktion per ftp_site() ersetzt[/li]
      [li]Da im SAFE MODE auch die Bilderstellung mit imagejpeg() nicht funktioniert, zunächst ein touch() für die zu erstellende Datei durchführen[/li]

    War zwar etwas Frickelei, aber jetzt funktioniert alles wieder wie vorher...

    Hier mal mein Code:
    Code:
    function my_ftp_mkdir($path, $mod = 0777) {
    global $ftp_server;
    global $ftp_user;
    global $ftp_pw;
    global $ftp_path;
    
    	$connid = ftp_connect($ftp_server);
    	$login_result = ftp_login($connid, $ftp_user, $ftp_pw);
    
    	// Check connection
    	if ((!$connid) || (!$login_result)) { return false; }
    	else { // Connection established
    		if(!ftp_chdir($connid, $ftp_path)){ return false; }
    		if( strrpos($path, /) == (strlen($path)-1)) {
    			// entfernt / als letztes Zeichen
    			$path = substr($path, 0, strrpos($path, /)); 
    		}
    		// Split new directory and folder to create it in
    		$new_dir = substr($path, (strrpos($path, /)+1));
    		$path = substr($path, 0, strrpos($path, /)); 
    		if (ftp_chdir($connid, $path) && ftp_mkdir($connid, $new_dir)) {
    			// funktioniert nur ab PHP 5
    			if(ftp_chmod($connid, $mod, $ftp_path.$path./.$new_dir)) {
    				return true;
    			}
    		}
    		return false;
    
    	}
    	@ftp_close($conn_id); 
    
    }
    
    function my_ftp_move_uploaded_file($tempname, $targetname) {
    global $ftp_server;
    global $ftp_user;
    global $ftp_pw;
    global $ftp_path;
    
    	$connid = ftp_connect($ftp_server);
    	$login_result = ftp_login($connid, $ftp_user, $ftp_pw);
    
    	// Check connection
    	if ((!$connid) || (!$login_result)) { return false; }
    	else {
    		if(ftp_put ($connid, $ftp_path.$targetname, $tempname, FTP_ASCII) && ftp_chmod($connid, 0777, $ftp_path.$targetname)) {
    			return true;
    		} else { return false; }
    	}
    	@ftp_close($conn_id); 
    	return false;
    }
    
    function my_ftp_chmod($chmod,$file) {
    global $ftp_server;
    global $ftp_user;
    global $ftp_pw;
    global $ftp_path;
    
    	$connid = ftp_connect($ftp_server);
    	$login_result = ftp_login($connid, $ftp_user, $ftp_pw);
    
    	// Check connection
    	if ((!$connid) || (!$login_result)) { return false; }
    	else {
    		return ftp_chmod($connid,$chmod,$ftp_path.$file);
    	}
    	@ftp_close($conn_id); 
    	return false;
    }
    
    if (!function_exists('ftp_chmod')) {
      function ftp_chmod($ftpstream,$chmod,$file)
      {
        $old=error_reporting();//save old
        error_reporting(0);//set to none
    	$ftp_command = CHMOD .$chmod. .$file;
        $result=ftp_site($ftpstream, $ftp_command);
        error_reporting($old);//reset to old
        return $result;//will result TRUE or FALSE
      }
    }
    Die globalen Variablen sind hier die FTP Zugangsdaten, die bei mir vorher gesetzt werden.

    Vielleicht hilft's noch jemandem....
     
Die Seite wird geladen...

[PHP] Verbotene Funktionen im SAFE MODE -> Workarround - Ähnliche Themen

Forum Datum
[php] Quelltext einer Website nach Wort durchsuchen und Aktion durchführen Windows XP Forum 28. Mai 2013
[PHP] Bild in Intervallen wechseln Webentwicklung, Hosting & Programmierung 28. Nov. 2012
[PHP] Was steckt in der MySQL result-resource? Webentwicklung, Hosting & Programmierung 21. März 2008
[php] Windows Anmeldung Webentwicklung, Hosting & Programmierung 11. Dez. 2006
[PHP] Session ohne Cookies Webentwicklung, Hosting & Programmierung 27. Dez. 2005