[php/apache] include binnen zelfde (sub)map wil niet

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Anoniem: 68499

Topicstarter
De situatie:

mijn_site/classes/class1.php
mijn_site/classes/class2.php

Bovenaan class1.php heb ik staan:
PHP:
1
require_once('class2.php');


met als gevolg:
Warning: main(class2.php): failed to open stream: No such file or directory

PHP-help over include geeft aan dat dit toch moet kunnen. Ik heb te maken met een shared-hosting omgeving (ik zal er even niet op ingaan welke, niet mijn keuze) en dus geen controle over de webserver. Dit is de eerste keer dat ik tegen kom en ik heb intussen met best een aantal shared-hosts te maken gehad.

Mijn vragen:
• Komt iemand dit bekend voor en zo ja, weet ie een oplossing?
• Weet iemand met welke configuratie-setting dit te maken kan hebben? Ik ga ze wel even bellen maar ik vind het altijd wel handig om m'n verhaal op order te hebben zodat ik wat tegenwicht kan bieden aan de standaard 'nee, kan niet','weet ik niet', 'hebben we nog nooit eerder gehoord' reacties... ;) *
* volgens mij heb ik iets te veel gelazer met hosting gehad de afgelopen tijd...

Alvast bedankt!

edit:

O ja, onderstaande 'oplossing' ben ik wel tegengekomen maar dat zou inhouden een compleet cms aan te passen met een omslachtige workaround om iets vaags bij hoster 'x' op te lossen. Da's iig niet 1e keus wat mij betreft.

PHP:
1
2
$strPathToScript= dirname(__FILE__);
require_once ($strPathToScript.'/class2.php');

[ Voor 20% gewijzigd door Anoniem: 68499 op 08-03-2006 16:39 ]


Acties:
  • 0 Henk 'm!

  • Gonadan
  • Registratie: Februari 2004
  • Laatst online: 22:15

Gonadan

Admin Beeld & Geluid, Harde Waren
Probeer eens een absoluut pad.

Look for the signal in your life, not the noise.

Canon R6 | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


Acties:
  • 0 Henk 'm!

Anoniem: 88197

Bovenaan class1.php heb je staan:

code:
1
require_once('class1.php');

Euuh, je include class1.php in class1.php?

Doe iets met $_SERVER-variabelen... Google hier eens op, is vast wel iets over te vinden.

[ Voor 5% gewijzigd door Anoniem: 88197 op 08-03-2006 16:47 ]


Acties:
  • 0 Henk 'm!

Anoniem: 53459

De "current working directory" is in PHP altijd relatief aan het pad waar het script is opgestart, en daarom niet per se aan het path van de file waar je include wordt aangeroepen. Als je het script dus opstart in /home/site en je class staat in /home/site/classes dan moet je nog altijd include('classes/class2.php'); doen.

Dit valt ook makkelijk op te lossen met de __autoload functie, ik gebruik deze:

PHP:
1
2
3
4
5
6
7
8
9
10
11
function __autoload($class) {
    if(is_file($fn = strtolower($class).'.class.php')) {
        require_once($fn);
    }
    if(is_file($fn = 'dbobjects/'.strtolower($class).'.class.php')) {
        require_once($fn);
    }
    elseif(is_file($fn = 'classes/'.strtolower($class).'.class.php')) {
        require_once($fn);
    }
}


Jij hebt wschl enkel die laatste nodig

Acties:
  • 0 Henk 'm!

Anoniem: 68499

Topicstarter
Euuh, je include class1.php in class1.php?
Dat is (was) dus een voorbeeld..... met een typefout.

Paden lijken hoe dan ook geinterpreteerd te worden vanaf de site-root. Voor 1 probleempje iets aanpassen zou dus ook geen punt zijn.

Maar in elk script van mijn CMS paden vanaf de site-root zetten maakt me een stuk minder flexibel in mijn keus in welke map ik eea neerzet . Zeker als daar gezien elke andere server waar ik ooit op gewerkt heb niet direct aanleiding voor is ben ik wat terughoudend om meteen alles van de in het topic neergezette workaround te voorzien.

Acties:
  • 0 Henk 'm!

Anoniem: 68499

Topicstarter
@bosmeeuw
Als ik het niet via een config aanpassing of wat dan ook gedaan krijg dan zal ik idd naar zoiets moeten zoeken. Maar ik gebruik includes binnen zelfde mappen wel vaker, ook buiten dit voorbeeld van classes.

Ergens heb ik zoiets van dat als een webhost wellicht een wat onorthodoxe configuratie er op na houdt, het veel handiger is dat ik eerst ga vragen of ze dat (voor bijv. alleen mijn domein) kunnen aanpassen dan dat ik om die reden alle scripts van m'n CMS ga aanpassen. Waar de boel dus ook niet beter van wordt naar mijn mening...

Onderstaand suggereert dat het toch echt zou moeten kunnen zoals ik doe, en dus ook niet zo vreemd is.
http://nl3.php.net/manual/en/function.include.php
Files for including are first looked in include_path relative to the current working directory and then in include_path relative to the directory of current script. E.g. if your include_path is ., current working directory is /www/, you included include/a.php and there is include "b.php" in that file, b.php is first looked in /www/ and then in /www/include/. If filename begins with ./ or ../, it is looked only in include_path relative to the current working directory.

[ Voor 22% gewijzigd door Anoniem: 68499 op 08-03-2006 17:18 ]

Pagina: 1