Was ist mit meinem require_once Pfad falsch?

7

Ich habe meine Dateien von einer lokalen Umgebung auf meine vps umgestellt und jetzt funktioniert meine Facebook-Benachrichtigung nicht, obwohl ich mir ziemlich sicher bin, dass ich alle Pfade korrekt aktualisiert habe. Ich habe versucht, den Require-Pfad auf zahlreiche Arten zu schreiben. Ich mache eine "$ .post" von jquery auf eine PHP-Seite, auf der die Facebook-Benachrichtigung gesendet wird und bekomme diesen Fehler:

%Vor%     
Spilot 06.11.2013, 21:27
quelle

11 Antworten

6

Ich habe schon einmal Probleme wie diese gesehen, und der beste Weg, dies zu handhaben, ist, Ihren wahren Dateipfad als eine Variable einzustellen & amp; fügen Sie das Ihren Einbeziehen / Anforderungen hinzu. Da das gesamte dirname(__FILE__) Setup in verschiedenen Umgebungen, insbesondere bei solchen, die symbolische Links verwenden, merkwürdig agieren kann. Es ist die beste Lösung, explizit anzugeben, wo Dateien eingestellt werden sollen.

Nehmen wir an, das ist Ihr Codebasis-Pfad; wie in ihrem Beispiel:

%Vor%

Legen Sie das als eine Variable fest, die alle Ihre Seiten in der folgenden Weise laden:

%Vor%

Und jetzt, wenn Sie das Dateisystem für Ihre App aufrufen, tun Sie dies:

%Vor%

Bei einem solchen Setup können Sie Ihre App zwischen verschiedenen Umgebungen portieren, indem Sie einfach $BASE_PATH an Ihre lokale Umgebung anpassen. Dies könnte ein Pfad für ein MAMP (Mac OS X LAMP) Setup sein:

%Vor%

Wie ungerade __FILE__ in symbolischen Umgebungen agieren kann, lesen Sie hier :

  

Seit PHP 4.0.2 enthält _ FILE _ immer einen absoluten Pfad mit   Symlinks wurden aufgelöst, während in älteren Versionen relative Pfade enthalten waren   unter bestimmten Umständen.

    
JakeGould 15.11.2013, 19:41
quelle
10

Sie verwenden require_once und haben einen Fehler "Klasse 'Facebook' nicht gefunden" . Wenn Sie require_once für eine Datei versuchen, die nicht existiert, würde dies zu einem anderen Fehler führen: "Schwerwiegender Fehler: require (): Fehler beim Öffnen erforderlich 'php-sdk / facebook.php'" . Also ist der Pfad wahrscheinlich in Ordnung. Überprüfen Sie, ob Sie php-sdk korrekt hochgeladen haben. Die facebook.php könnte leer sein.

    
FoxException 15.11.2013 19:41
quelle
8

Ihr Fehler ist:

%Vor%

Die wertvolle Information hier ist:

  • Der Fehler ist aufgetreten, weil die Klasse Facebook unbekannt ist, was bedeutet, dass require_once diesen Fehler nicht löschte
  • Der Fehler ist in Zeile 9 von accept.php
  • aufgetreten

Nun müssen Sie schauen, warum die Klasse Facebook in Zeile 9 unbekannt ist.

  • Wenn Sie das facebook.php vor Zeile 9 eingefügt haben, enthält es wahrscheinlich nicht die richtige Klasse. (Klassennamen sind Groß- und Kleinschreibung!)
  • Wenn Sie facebook.php nach Zeile 9 einfügen, müssen Sie es nur früher aufrufen.

PS: Die ersten 10-15 Zeilen von accepted.php könnten uns genügend Informationen liefern, um das genaue Problem hier zu lokalisieren.

    
Daniel P 19.11.2013 07:48
quelle
2

Der Fehler "Klasse nicht gefunden" bezieht sich nicht auf die Problemladedatei. Sie verwenden eine Anforderung, wenn die Datei nicht existiert, wird ein erforderlicher Fehler ausgelöst, und dies ist nicht der Fall.

Wahrscheinlich heißt die Klasse innerhalb von facebook.php nicht Facebook, wahrscheinlich ist sie mit einem anderen Namen oder mit einem anderen Fall wie "facebook"

%Vor%     
Dubas 21.11.2013 11:18
quelle
2

Ist es möglich, dass:

  • Ihr short_open_tag ist in Ihrer lokalen Umgebung aktiviert
  • es ist auf Ihren vps und
  • deaktiviert
  • Sie verwenden <? anstelle von <?php in Ihrer facebook.php Datei
Pierre 19.11.2013 17:09
quelle
1

Aus irgendeinem Grund stoße ich auf Umstände, bei denen php die Datei, die ich brauche, nicht mit konventionellen Mitteln findet. Ich habe einen Code gefunden, der zum Durchsuchen eines Verzeichnisses und zum Abrufen einer Liste von Dateien verwendet wurde, was in einem url-Generierungsskript, das ich geschrieben habe, von Vorteil war. Überstunden habe ich dieses einfache Skript für viele Aufgaben verwendet, z. B. Dateien finden, wenn normal require/include fehlschlägt. zur Not funktioniert dieser Hack für mich.

Geben Sie einfach den Dateinamen $somefile und den Verzeichnisnamen $log_directory ein, wenn sich Ihr Verzeichnis im Basispfad befindet, geben Sie es einfach ohne Schrägstriche ein. Wenn es unter dem Basispfad ist, tippe es wie folgt /path/to/folder

hoffe das hilft.

%Vor%     
r3wt 21.11.2013 04:30
quelle
1
%Vor%     
saloni 21.11.2013 10:54
quelle
0

Der von Ihnen angegebene Pfad ist falsch:

%Vor%

Diese Notwendigkeit dort hat eine Datei hat vollständigen Pfadnamen: /dir/to/your/actual/include/path/php-sdk/facebook.php

Und später brauchst du Datei in include_path falsch, dirname (__ FILE__) ODER __DIR__ ist das Verzeichnis der Datei wo require_once () aufgerufen wird, also suchst du facebook.php im php-sdk Unterverzeichnis unter deinem aktuellen php Skript .

Um Ihr Problem zu beheben, haben Sie 2 Plan

  1. Besser, finde deinen tatsächlichen include_path und setze php-sdk Dateien in, include_path kann von php.ini finden, oder führe php -m von shell oder phpinfo () aus, auf diese Weise, deine erste require_once ( ) wird funktionieren.

  2. Stellen Sie sicher, dass das php-sdk-Verzeichnis facebook.php im selben übergeordneten Verzeichnis mit Ihrem aufrufenden PHP-Skript enthält. Dies ist keine übliche Verwendung, aber Ihr zweites require_once () funktioniert.

Ich empfehle Ihnen, mehr über php include_path configure und __FILE__ magic constant zu lernen.

    
Fwolf 17.11.2013 15:04
quelle
0
%Vor%

Angenommen, der Ordner php-sdk befindet sich im Stammverzeichnis Ihres Website-Verzeichnisses.

    
superphonic 20.11.2013 13:26
quelle
0
%Vor%

Dies setzt voraus, dass sich die facebook.php-Datei in einem Ordner befindet, der sich im aktuellen Ordner der PHP-Datei befindet, die aufgerufen wird.

Ist das der Fall? Ich vermute nicht, da du einen Fehler hast!

Befindest du dich in einem Ordner oberhalb der Wurzel?

--- ROOT
--- ROOT & gt; FOO - dein Skript hier?
--- ROOT & gt; php-sdk --facebook hier drin

Wenn ja ...

%Vor%

würde funktionieren.

    
user2732377 20.11.2013 15:32
quelle
0

Versuchen Sie $_SERVER['DOCUMENT_ROOT'].'/path to /php-sdk/facebook.php'

$_SERVER['DOCUMENT_ROOT'] gibt den absoluten Pfad für www oder htdocs Ordner, dann können Sie den Pfad zu facebook.php

angeben     
Raviraja 18.11.2013 11:40
quelle

Tags und Links