Fehler beim Schreiben in Ordner

Alex2xm

Mitglied
Hallo Zusammen,

folgendes Problem :-(

Habe mir ein kleines Skript gebaut, welches Bilder auf beim hochladen verkleinert.
Das alles funktioniert auch mit WAMP super, nur als ich es nun auf den Webspace geladen und ausgeführt haben bekomme ich folgenden Fehler:
Warning: imagejpeg() [function.imagejpeg]: Unable to open '/home/www/htdocs/XXX/2318.jpg' for writing in /home/www/htdocs/XXX/module/function_verkleinern.inc on line 40

In Line 40 steht:
Code:
ImageJPEG($dest,"$bilder_out".$bild_id.$suffix, $quality); //erstellt jpeg und schreibt in dest.
Die Rechte des Bilderordners habe ich schon auf 775 gesetzt, und die Pfade absolut angegeben, aber keine Chance :-(

Bin für jede Hilfe dankbar.

Viele Grüße
Alexander
 
Du solltest die Berechtigung auf 0777 setzen. Bei 0775 ist "write by others" nicht an. Da PHP je nach Installation unter einem anderen Benutzer läuft, kann das mit den Berechtigungen nicht so klappen.
Oder: erstelle die Grafik im PHP-Temp Ordner, und schicke dann die Datei über FTP.

PHP:
function mv_file ($file_name, $dest, $new_name = "")
{
  if ($new_name == "")
  {
    $new_name = basename ($file_name);
  }
  global
    $ftp_server,
    $ftp_user,
    $ftp_pass;

    $file = fopen ($file_name, "r");

    $connection = ftp_connect($ftp_server); // connection

    // login to ftp server
    $result = ftp_login($connection, $ftp_user, $ftp_pass); 

    // check if connection was made
    if ((!$connection) || (!$result)) 
    {
      return FALSE;
      exit();
    } else {
      ftp_chdir($connection, $dest); // go to destination dir
      if (ftp_fput ($connection, $dest . "/" . $new_name, $file, FTP_BINARY))
      {
        unlink ($file_name);
        $ret = TRUE;
      } else {
        $ret = FALSE;
      }
      ftp_close($connection); // close connection
    }
    fclose ($file);

    return $ret;
}
Natürlich muss der FTP-Benutzer die entsprechenden Berechtigungen haben.

Oder hat jemand eine bessere Lösung, statt FTP zu verwenden?
 
Das ist - meiner Meinung nach - eine Schwäche wenn PHP als Modul vom Apachen ausgeführt wird.

Anders nämlich als im CGI-Modus werden so die PHP-Skript im Context des Apache-Benutzers ausgeführt.
Dagegen CGI-Skripte werden (bei einer Standardconfixx-Installation) im Context des Benutzers webXXX ausgeführt. Dieser Benutzer wird auch verwendet um Dateien über ftp-hoch zu laden. Weiterhin ist der webXXX-Benutzer standardmäßig der Besitzer aller Order und (weil über ftp hochgeladen) auch aller Dateien.

Daher muss - wie im obigen Posting - ein Pseudo ftp verwendet werden, um mit PHP in die Verzeichnisse des Benutzers webXXX zu schreiben.

Idee:
====

Wenn das CLI für php installiert und bekannt ist und des Weiteren aufgerufen werden kann, dann könnte man ein CGI-Skript schreiben, dass den php CLI Interpreter verwendet. Das wird dann im Context des webXXX-Benutzers ausgeführt.

So nach diesem Schema:

#!/usr/local/php
<?

// PHP Code hier

?>

Nachteil ist natürlich, dass man nur noch auf die CGI-Variablen zugreifen kann, also $_REQUEST nicht mehr . Das habe ich schon mal getestet, ob es aber zu empfehlen ist, bezweifle ich.

Gruß
Oli
 
Zurück