[PHP] Verbotene Funktionen im SAFE MODE -> Workarround

  • #1
J

JediMB

Bekanntes Mitglied
Themenersteller
Dabei seit
04.04.2003
Beiträge
244
Reaktionspunkte
0
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
 
  • #4
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....
 
Thema:

[PHP] Verbotene Funktionen im SAFE MODE -> Workarround

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.840
Beiträge
707.963
Mitglieder
51.494
Neuestes Mitglied
Flensburg45
Oben