Jump to content
xt:Commerce Community Forum

Dateianhang-Probleme


oldbear

Recommended Posts

hi,

im Betrieb beim localhost klappt die Sache, am Server jedoch nicht:

beim Aufruf erscheint folgende Meldung:

Forbidden

You don't have permission to access /store/media/files_public/qnwnkouowgl/cat_uz878.pdf on this server.

Apache Server at Domain.de - Domains registrieren und verwalten - Ihre Online-Plattform für Domains und Webhosting Port 80

und es werden immer kryptische Pfade ( qnwnkouowgl ) in die xt_media_symlink geschrieben

Die Dateien liegen in ../media/files_public

Wer weiss warum ?

Grüsse

Günther

Link to comment
Share on other sites

Vielen Dank,

habe das mal an den Provider weitergegeben. In anderem Zusammenhang haben Sie mal erwähnt ( war ein Strato-Kunde ), dass, Zitat: die "Standard" -.htaccess von Veyton durch Strato überschrieben wurde. Gibt es diese "Standard" -.htaccess überhaupt, und wo ?

mfg Günther Schmid

In der Ruhe liegt die Kraft.

EDIT: wenn ich auf den Server kucke, werden die Symlinks angelegt und verweisen auf die richtige Datei im ../media/files-Verzeichnis ( Standard ist wohl upload nach "files" , intern Symlinks in "files_public", wenn diese als freie Downloads angelegt werden )

Link to comment
Share on other sites

  • 5 months later...

Da hier überall im forum nur steht, dass symlinks schuld sind, aber das nicht stimmt, möchte ich die andere lösung zeigen:

Der Fehler liegt bei einigen Servern nicht an Symlinks, sondern an den rechten des Ordners.

Die kryptischen Unterordner (z.B. qnwnkouowgl) werden dynamisch erstellt und dabei bekommen sie logischerweise Rechte. Wenn diese z.B. 0770 sind, dann kann man von außerhalb nicht auf den Ordner zugreifen. Kann man z.B. leicht testen, wenn man die rechte auf 0777 ändert und dann den die datei mit dem Ordner direkt aufruft (nicht neu auf den link in der artikelübersicht klicken, weil das wieder einen neuen ordner erzeugt...)

Entsprechend müssen die Rechte beim erstellen des Ordners angegeben werden. Normalerweise könnte man das an der entsprechenden Stelle im Shop-Code machen, aber das ist halt nicht so gut, daher gibt es noch eine andere Möglichkeit:

Die umask des ausführenden Users ändern. Die umask gibt quasi an, wie die Rechte modifiziert werden sollen.

Beispiel, wie es bei mir ging (Ubuntu mit Apache2 und suPHP):

vorher waren die dynamischen Ordner alle: 0774 (keine ausführrechte)

Dann hab ich in /etc/suphp/suphp.conf den umask von 0003 auf 0002 geändert.

Dadurch werden dann alle erstellten ordner mit dem recht 0775 (inkl. ausführrechte)

Bei anderen serverkonfigurationen muss umask entsprechend anders gesetzt werden.

an die entwickler: vielleicht könnte man an der entsprechenden stelle im php-code bei dem sicherlich "mkdir(....)" benutzt wird, den mode-parameter verwenden um somit schon die richtigen rechte zusetzen!

hoffe ich konnte weiterhelfen

Link to comment
Share on other sites

hi,

an die /etc kommt man ohne eigenen Server meist nicht ran, ich konnte das Problem für Profihost so lösen ( aus dem Forum ):

In der Class.download.php sieht das so aus:

function _createSymlink($file,$tmp_dir) {

global $logHandler;

$dir = _SRV_WEBROOT;

$dir_2 = $_SERVER['DOCUMENT_ROOT'];

if (file_exists($dir.$this->safe_dir . $file)) {

$dir = $dir;

} elseif($dir_2.$this->safe_dir . $file){

$dir = $dir_2;

} else {

$log_data = array();

$log_data['error'] = 'no file found';

$logHandler->_addLog('error','download','0',$log_data);

}

originalzeile:

//symlink($dir.$this->safe_dir . $file, $dir.$this->public_dir . $tmp_dir . "/" . $file);

//WWWROOT is only available in ChangeRoot but

//does not point to a real file when symlinking

symlink('../../../../../'.$dir.$this->safe_dir . $file,$dir.$this->public_dir . $tmp_dir . "/" . $file);

hat das was mit Rechten zu tun ?

Weiter unten tatsächlich mkdir:

/**

* create dir in files_public folder

*

* @param unknown_type $dir

*/

function createPublicDir($dir) {

mkdir(_SRV_WEBROOT.$this->public_dir.$dir);

}

Wie müsste hier der Mode-Parameter eingebaut werden ?

Grüsse

Link to comment
Share on other sites

Wenn ich das richtig sehe, ändert sich dadurch nur der ordner... wäre möglich, dass da die Pfade nicht richtig sind...

Den mode-parameter benutzt man z.B. wie folgt:

mkdir("/path/to/my/dir", 0775);

Siehe auch PHP: mkdir - Manual

um über php im skript den umask zu ändern, wäre auch folgendes möglich:

$old = umask(0);

mkdir($dir,0777);

umask($old);

Link to comment
Share on other sites

  • 10 months later...
  • 3 months later...

Archived

This topic is now archived and is closed to further replies.

×
  • Create New...