/ Die Funktion / PHP file_exists () gibt unter / usr / bin / mysql - php, permissions false zurück

Die Funktion PHP file_exists () gibt unter / usr / bin / mysql - php, permissions false zurück

Ich habe zahlreiche Beiträge zu diesem Problem gelesen und keinevon denen passt genau zu meinem Problem. Ich habe eine WordPress-Site (derzeit 3.5) auf einem virtuellen GoDaddy-Host. Im November entschied ich mich für ein Upgrade des Betriebssystems von CentOS 5 auf CentOS 6.3, was eine vollständige Neuinstallation des Betriebssystems beinhaltete, über die ich keine Kontrolle hatte und über die ich keine Informationen hatte. Nach der Neuinstallation von O / S habe ich die Site von einem Backup wiederhergestellt, das ich kurz vor dem Start erstellt hatte.

Nach dem Umbau haben wir ein WordPress-Plugin bekommenMit WP-DBManager wurde die Sicherung unserer MySQL-Datenbank über Jahre plötzlich eingestellt. Die Sicherung schlägt fehl, weil im Sicherungsfenster behauptet wird, dass der MYSQL-Pfad NICHT vorhanden ist. Es ist ärgerlich, wenn Sie auf der Seite DB-Optionen festlegen, dass der MySQL-Pfad automatisch erkannt werden soll, dass die Optionsseite / usr / bin / mysql erstellt, was korrekt ist. Ich kann mich mit SSH auf der Seite einloggen und da ist es. Die Berechtigungen sind:

-rwxr-xr-x 1 root root 338184 Jun 22 05:58 /usr/bin/mysql

Das sollte funktionieren. Etwas in meiner Site hat sich mit dieser Neuerstellung geändert, und ich weiß nicht, was. Bisher habe ich nur WordPress-Konfigurationen dokumentiert. Die von mir durchgeführten Untersuchungen legen nahe, dass dies möglicherweise mit dem abgesicherten PHP-Modus zu tun hat. Wir führen PHP 5.3.3 aus, und die Konfigurationsliste von phpinfo () wird nicht angezeigt

--enable-safe-mode

was bedeutet, dass der abgesicherte Modus ausgeschaltet sein sollte. Die Einstellungen für den abgesicherten Modus in der php.ini waren beim Start:

safe_mode_allowed_env_vars = PHP_
safe_mode_protected_env_vars = LD_LIBRARY_PATH
safe_mode_exec_dir =
safe_mode_include_dir =
safe_mode = off
safe_mode_gid = off

Ich habe seitdem safe_mode_gid auf ON geändert, mit der Nrbewirken. Ich habe eine Test-Site, die von der Produktions-Site aus erstellt wurde, wobei safe_mode_include_dir = ~. Deshalb habe ich das ohne Wirkung versucht. Auf der Testsite wird PHP 5.3.14 ausgeführt, und die obigen Einstellungen für den abgesicherten Modus waren bis auf safe_mode_include_dir identisch. Ich habe die ENV-Variable überprüft und / usr / bin ist im PATH enthalten:

PATH = / usr / local / bin: / bin: / usr / bin: / usr / local / sbin: / usr / sbin: / sbin: / home / lrservice / bin

Ich weiß nicht, ob dies ein Problem mit Umgebungsvariablen ist. Hier sind die Einträge für den abgesicherten Modus:

safe_mode_allowed_env_vars = PHP_
safe_mode_protected_env_vars = LD_LIBRARY_PATH

Diese Einstellungen sind auf dem Testgelände nicht alle gleich, heißt es:

safe_mode_allowed_env_vars = PHP_ LANG LANG_

Da die Seite außer voll funktionsfähig istAus diesem Grund weiß ich, dass die Berechtigungen von mysql im Allgemeinen korrekt sind. Läutet diese Klingel für jeden? Warum bekomme ich das alles, wenn der abgesicherte Modus offiziell deaktiviert ist? Ich vermisse.

Antworten:

2 für die Antwort № 1

Sie haben Zugriff auf die mysql binär von einem ssh Sitzung in der /usr/bin Verzeichnis, aber php kann es nicht am selben Ort finden. Ich gehe davon aus, dass Ihr System das verwendet apache2 Webserver.

Ist der ChrootDir Direktive, die in der Apache - Konfigurationsdatei enthalten ist (normalerweise unter /etc/httpd/conf/httpd.conf)

Wenn dies der Fall ist, können Sie im Internet eincheckenVerzeichnis, auf das diese Direktive verweist, wenn eine Verknüpfung zur mysql-Binärdatei besteht. Wenn nicht, fügen Sie es einfach hinzu, indem Sie in Ihrer ssh-Sitzung den folgenden Befehl ausführen (vorausgesetzt, Sie haben die Berechtigung dazu):

$ ln /usr/bin/mysql /chroot/path/usr/bin/mysql

mit /chroot/path ersetzt durch die ChrootDir Anweisungspfad.


Einer der Kommentare erwähnt die open_basedir PHP-Einstellung, die entweder in konfiguriert werden kann php.ini, httpd.conf, oder .htaccess Dateien.

Diese Einstellung beschränkt den Zugriff auf bestimmte Verzeichnissedes für PHP verfügbaren Dateisystems. Ein möglicher Fix besteht darin, diese Einschränkung für die Skripte zu entfernen, die von dem von Ihnen verwendeten Plugin ausgeführt werden, wenn diese Einstellung nicht geschützt ist:

  • Suchen Sie die vom Plugin installierten Skripte in Ihrem WordPress-Verzeichnis.
  • Erstellen Sie eine .htaccess-Datei, um die Einschränkung in dem Verzeichnis aufzuheben, das die Skripte enthält, und geben Sie folgende Befehle ein:

    $ echo "php_value open_basedir none" >> .htaccess

Das Obige fügt den Text zwischen einfachen Anführungszeichen einam Ende der .htaccess-Datei, erstellen Sie es bei Bedarf. Diese Lösung ist wahrscheinlich die sicherste, da sie die Sicherheit auf diese Skripte reduziert. Sie sollten vorsichtig sein, dass Sie diesen Skripten möglicherweise mehr Zugriff gewähren, als sie tatsächlich benötigen.

Wenn dies nicht funktioniert, ist die Einstellung geschützt und muss in beiden Fällen geändert werden httpd.conf oder php.ini welches sich beide innerhalb der befinden sollte /etc Verzeichnis. Sieh dir das an SO Frage für Details.