Gibt es sowas schon?
Ich hab jetzt parallel zum Freecommander den Filezilla installiert. Doch der macht des net so wie es sein soll und setzt alles statt mit 777 mit 666...
Gibt es sowas schon?
Ich hab jetzt parallel zum Freecommander den Filezilla installiert. Doch der macht des net so wie es sein soll und setzt alles statt mit 777 mit 666...
Hm, normal sollte das aber funktionieren. Ist dein Webserver auch entsprechend richtig eingestellt?
Webserver steht, ist kein Problem
Ist nicht das erste wbb3, was ich da drauf packe (wenn auch bis jetzt immer nur zum testen). Nur heute will er irgendwie net...
Na ob er steht, oder fehlerfrei ist, ist immer noch ein Unterschied
Ich glaub ich habs...
Das FTP-Proggy hat nicht alles rauf geladen. Ich lade gerade alles neu hoch und siehe da, es kommen Bruchstücke der Seite zu Tage...
Somit scheinen die Rechte richtig zu stehen, nur waren nicht alle Dateien da (wobei ich das net verstehe, aber das ist Technik) ...
Tante Edit sagt:
Zu rüh gefreut...
Forum läßt sich aufrufen, aber ins ACP komme ich net rein. Da kommt der Fehler:
ZitatInternal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, [no address given] and inform them of the time the error occurred, and anything you might have done that may have caused the error.
More information about this error may be available in the server error log.
Ordner sind alle auf 777, wie auch die Dateien darin.
Läuft das System zufällig über suPHP/fcgi? Denn dort ist der Chmod 666/777 nicht zulässig. Dateien erhalten stattdessen 755. Da der Server schneller arbeitet, als du und dein Filezilla, könntest du zum Setzen des Chmod folgenden PHP-Schnipsel benutzen:
<?
function chmodR($path, $filePerm=0644, $dirPerm=0755) {
if(!file_exists($path)) {
return(FALSE);
}
if(is_file($path)) {
chmod($path, $filePerm);
} elseif(is_dir($path)) {
$foldersAndFiles = scandir($path);
$entries = array_slice($foldersAndFiles, 2);
foreach($entries as $entry) {
chmodR($path."/".$entry, $filePerm, $dirPerm);
}
chmod($path, $dirPerm);
}
return(TRUE);
}
chmodR("forum/", 0755);
?>
Alles anzeigen
hmm, hab ich versucht, aber irgendwas geht da net. Es tut sich nichts...
"Forum" hab ich in den Namen umgewandelt, den ich aufm Server habe. Muss ich noch wo was eingebe?
Und muss die Datei ins Root des Servers oder des Forums? Beides ohen Erfolg probiert...
Okay, also prinzipiell kann man die Funktion auch noch verkürzen:
<?
function chmodR($path, $filePerm=0777, $dirPerm=0777) {
$dirIter = new RecursiveDirectoryIterator($path);
$recursiveIterator = new RecursiveIteratorIterator($dirIter, RecursiveIteratorIterator::SELF_FIRST, RecursiveIteratorIterator::CATCH_GET_CHILD);
foreach ($recursiveIterator as $element) {
if($element->getType() == 'file') {
chmod($element->getPathname(), $filePerm)
} elseif($element->getType() == 'dir') {
chmod($element->getPathname(), $dirPerm);
}
}
}
chmodR("forum/", 0755);
?>
Alles anzeigen
Sowohl in dieser Funktion als auch in der vorherigen wird beim Funktionsaufruf definiert, auf welches Verzeichnis und dessen Dateien die Dateirechte angewendet werden:
Befindet sich das Script also im WBB/WCF Verzeichnis, wird "." an Stelle von "ORDNER" geschrieben. Die Werte CHMOD1 und CHMOD2 stehen für den zu vergebenden chmod, wobei CHMOD1 für Dateirechte und CHMOD2 für Verzeichnisrechte definiert wird.
Nun gibt es aber etwas zu beachten: .htaccess Dateien und die Datei config.inc.php im Verzeichnis des WCF müssen chmod 644 besitzen, dürfen also von dieser Funktion nicht berührt werden. Gerade dann, wenn .htaccess Dateien einen falschen chmod erhalten, kommt es zu 500er Serverfehlern. Die Konfigurationsdatei erhält aus Sicherheitsgründen ausschließlich chmod 644.
Ich habe mal quick & dirty was zusammengeschustert. Sicherlich nicht schön, aber definitiv selten:
<?php
/**
* Recursive chmod
*
* @author Sascha Heldt
* @copyright 2011 by Sascha Heldt <[email]sascha@softcreatr.de[/email]>
* @license NU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
*/
/*
* Set chmod and output results
*/
function chmodR($path, $filePerm=0777, $dirPerm=0777, $type='WBB') {
// Remove trailing slash, if present
if (substr($path, -1) == '/') {
$path = substr($path, 0, -1);
}
// WBB/WCF config import
if (file_exists($path . '/config.inc.php')) {
require_once($path . '/config.inc.php');
$dirIter = new RecursiveDirectoryIterator($path);
$recursiveIterator = new RecursiveIteratorIterator($dirIter, RecursiveIteratorIterator::SELF_FIRST, RecursiveIteratorIterator::CATCH_GET_CHILD);
foreach ($recursiveIterator as $element) {
$excluded = array(
'.htaccess'
);
$result = '0';
$oldPerms = substr(sprintf('%o', $element->getPerms()), -3);
// Excludes
if (defined('RELATIVE_WCF_DIR') && !defined('WCF_N')) {
if (preg_match('#' . RELATIVE_WCF_DIR . '#', $element->getPathname())) {
continue;
}
} else {
// Exclude
$excluded[] = 'config.inc.php';
}
if ($element->getType() == 'file' && !in_array(basename($element->getPathname()), $excluded)) {
if (@chmod($element->getPathname(), $filePerm)) { // set $filePerm for files
$newPerms = sprintf('%o', $filePerm);
$result = '1';
}
}
elseif ($element->getType() == 'dir') {
if (@chmod($element->getPathname(), $dirPerm)) { // set $dirPerm for folders
$newPerms = sprintf('%o', $dirPerm);
$result = '1';
}
}
elseif (in_array(basename($element->getPathname()), $excluded)) {
if (@chmod($element->getPathname(), 0644)) { // make sure, excluded files' chmod is 644
$newPerms = sprintf('%o', 0644);
$result = '1';
}
}
$ret[] = "['" . $type . "','" . str_replace($path, "", $element->getPathname()) . "', " . $oldPerms . ", " . $newPerms . ", " . $result . "]";
}
echo implode(',', $ret);
// Check, if WCF is present in $path, otherwise
// include it seperately and restart the function
if (defined('RELATIVE_WCF_DIR') && !defined('WCF_N')) {
if (preg_match('#../#', RELATIVE_WCF_DIR)) {
echo ',';
chmodR($path . '/' . RELATIVE_WCF_DIR, $filePerm, $dirPerm, 'WCF');
}
}
}
else {
define('ERROR', 1);
}
}
/*
* Config
*/
$wbbDir = '.'; // Pfad zum WBB
$filePerms = 0644; // Chmod für Dateien
$dirPerms = 0755; // Chmod für Verzeichnisse
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>Auswertung</title>
<style type="text/css" title="currentStyle">
@import "http://www.datatables.net/release-datatables/media/css/demo_page.css";
@import "http://www.datatables.net/release-datatables/media/css/demo_table.css";
</style>
<script type="text/javascript" language="javascript" src="http://www.datatables.net/release-datatables/media/js/jquery.js"></script>
<script type="text/javascript" language="javascript" src="http://www.datatables.net/release-datatables/media/js/jquery.dataTables.js"></script>
<script type="text/javascript" charset="utf-8">
var aDataSet = [
<?php chmodR($wbbDir, $filePerms, $dirPerms); ?>
];
$(document).ready(function () {
$('#dynamic').html('<table cellpadding="0" cellspacing="0" border="0" class="display" id="chmodR"></table>');
$('#chmodR').dataTable({
"aaData": aDataSet,
"aoColumns": [{
"sTitle": "Anwendung"
}, {
"sTitle": "Ordner / Datei"
}, {
"sTitle": "Alt"
}, {
"sTitle": "Neu"
}, {
"sTitle": "Ergebnis",
"sClass": "center",
"fnRender": function (obj) {
var sReturn = obj.aData[obj.iDataColumn];
if (sReturn == 1) {
sReturn = "<b>Erfolgreich</b>";
} else {
sReturn = "<b>Nicht erfolgreich</b>";
}
return sReturn;
}
}]
});
});
</script>
</head>
<body id="dt_example">
<div id="container">
<div class="full_width big">
<?php if (defined('ERROR')) { ?>
<i>Fehler. Die Konfigurationsdatei des WBB konnte nicht aufgerufen werden.</i>
</div>
<p>Mögliche Ursachen:</p>
<ul>
<li>Der Pfad zum WBB-Verzeichnis wurde falsch angegeben</li>
<li>Das angegebene Verzeichnis konnte nicht gelesen werden</li>
</ul>
<?php } else { ?>
<i>Auswertung für Vorgang "chmod"</i>
</div>
<div class="spacer"></div>
<div id="dynamic"></div>
<?php } ?>
</div>
</body>
</html>
Alles anzeigen
Hier musst du lediglich in Zeile 88 ggf. den Pfad zum Forum anpassen, oder das Scipt im WBB-Verzeichnis ausführen. Das Script sollte automatisch den Pfad des WCF erkennen und den chmod 777 auf alle Dateien und Ordner anwenden, bis auf die .htaccess Dateien und die config.inc.php im WCF-Verzeichnis. Zudem bekommst du eine schöne Übersicht der Dateien und Änderungen, mit Hilfe eines JQuery-Scripts zur Darstellung von Tabellen.
Lange Rede, kurzer Sinn: Spiel ein wenig mit dem chmod (Zeille 89 und 90), um den korrekten Wert für deine Serverkonfiguration zu finden. Nochmal zur Erinnerung:
Standardmäßig erhalten Dateien beim FTP-Upload chmod 644, Ordner 755
Standardmäßg ist der chmod aller Dateien und Ordner (bis auf o.g. Ausnahmen) bei der WCF/WBB Installation 777
Unter suPHP ist der chmod 666 bzw. 777 unzulässig. Stattdessen werden 644 bzw. 755 verwendet
Viel Erfolg
PS: Sollte es irgendwelche Probleme bei der Nutzung des Scripts geben, schreib mir eine PN, da dies nicht zum eigentlichen Thema gehört
PPS: Das Script wäre, wenn man auf die Ausgabe verzichten würde, wesentlich kleiner und "schöner".
Werd ich später testen, heute morgen stehen noch andere DInge an...
So, ne Rückmeldung zum Script: Et lüppt...
Musste wohl 2x aktualisieren, da das FTP-Proggy das nicht gleich angezeigt hat, aber gut, et geht ja...
Danke Dir für Deine Mühe...
Freut mich, dass es nun geklappt hat.
Habs die Tage auch bei nem Light probiert. Auch da geht es...
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!