Project

General

Profile

Σφάλματα #127

Γραμμή Μάθησης - Εργασίες: include error

Added by Αλέξανδρος Διαμαντίδης over 6 years ago. Updated about 6 years ago.

Status:
Νέα
Priority:
Κανονική
Assignee:
-
Target version:
Start date:
23/01/2014
Due date:
% Done:

20%

Estimated time:

Description

Κατά την εμφάνιση άσκησης που έχει προστεθεί στη γραμμή μάθησης, εμφανίζεται:

Warning: require_once(../../include/log.php): failed to open stream: No such file or directory in /var/www/eclass/modules/exercise/exercise.class.php on line 22

Fatal error: require_once(): Failed opening required '../../include/log.php' (include_path='.:/usr/share/php5:/usr/share/php') in /var/www/eclass/modules/exercise/exercise.class.php on line 22

Associated revisions

Revision 6591:a6520ebe4fc4 (diff)
Added by Thanos Kyritsis over 6 years ago

temporary bugfix exercise class include log (refs #127)

Revision 14982:b3595386f835 (diff)
Added by Thanos Kyritsis over 6 years ago

temporary bugfix exercise class include log (refs #127)

History

#1

Updated by Yury Kherimyan over 6 years ago

Δεν φτάνει στο ίδιο επίπεδο με το include, θέλει να πάει άλλο ένα επίπεδο πάνω, δλδ modules/exercise/exercise.class.php on line 22:
require_once '../../include/log.php' =>
require_once '../../../include/log.php'

Αν και δεν θα ήταν σωστότερο να χρησιμοποιηθεί κάτι σαν τη μεταβλητή
$webDir = 'S:/WorkSpace/openeclass/';
και να γίνει
require_once $webDir.'include/log.php'

#2

Updated by Yury Kherimyan over 6 years ago

Έψαξα λίγο και είδα πως εξαρχής ήταν γραμμένο έτσι και εξαρχής ο φάκελος include ήταν στη θέση που είναι και τώρα,
οπότε στο ερώτημα του γιατί δεν είχε σκάσει μέχρι τώρα μπορώ μονάχα να κάνω την εικασία πως:

- Γινόταν include το log.php από άλλη τοποθεσία (με σωστό path) και επειδή ήταν σε require_once δεν πήγαινε όντως
να το κάνει include και το προσπερνούσε. Στην γραμμή μάθησης όμως μάλλον δεν το ζητάμε κάπου νωρίτερα οπότε
πάει όντως να το κάνει include με το λάθος path και σκάει (μιας και είναι require κ όχι απλό include)

#3

Updated by Yury Kherimyan over 6 years ago

Εικασία 2η (νομίζω πιο σωστή):

Σύμφωνα με αυτό [[http://stackoverflow.com/questions/2253625/php-require-once-not-working-the-way-i-want-it-to-relative-path-issue]],
όταν γίνει nested require(_once) and include(_once), θα δουλέψουν όλα με τη σχετική διαδρομή του αρχικού αρχείου που τα κάλεσε. Εικάζω πως σε άλλες
περιπτώσεις το modules/exercise/exercise.class.php καλείται από βάθος 2 (δλδ: modules/something ή main/something etc). Στην περίπτωση όμως
του learning path καλείται από βάθος 3, συγκεκριμένα από το modules/learnPath/navigation, οπότε το ../../ δεν του αρκεί και καταλήγει να πηγαίνει
στο φάκελο modules/include.

Επομένως η λύση με το ../../ να γίνει ../../../ λύνει το πρόβλημα στο learning path,
αλλά μπορεί (δεν είδα ακόμα) να χαλάει το require των logs σε κάποιο άλλο σημείο.
Οπότε προτείνω να γίνει:
require_once __DIR__.'/../../include/log.php';

#4

Updated by Thanos Kyritsis over 6 years ago

Για να σε γλιτώσω και από τον κόπο του ψαξίματος, στο συγκεκριμένο κομμάτι των includes/requires θα κάνουμε την κατάλληλη βελτίωση ώστε να μην χρειάζονται καθόλου τα relative paths, να γίνουν όλα δηλαδή require_once('include/log.php'); ανεξαρτήτως βάθους directory, οπότε να σταματήσουν και στο μέλλον όλα τα σχετικά bugs. Απλώς ανοίξαμε και το bug για να μας θυμίζει την εκρεμμότητα :-)

#5

Updated by Thanos Kyritsis over 6 years ago

  • % Done changed from 0 to 20

Έστειλα ένα προσωρινό πρόχειρο patch, για να μην σκάει με error, που κάνει file_exists και τσεκάρει αν πρέπει να βάλει 3 directories πάνω ή 2.
Ας αφήσουμε ανοιχτό το issue. Η πραγματική λύση θα δοθεί όταν χρησιμοποιήσουμε την set_include_path(), αλλά ας προχωρήσει το development προς το παρόν και το κοιτάμε.

#6

Updated by Thanos Kyritsis about 6 years ago

  • Priority changed from Υψηλή to Κανονική

Also available in: Atom PDF