include i include path - błąd function.include

2014-03-27 00:19
0

Cześć wszystkim :)

Już parę lat zajmuje się HTML'em i CSS'em, ale PHP itp. to jak narazie magia...
Odkryłem ciekawą możliwość pakowania kawałków stron które są wspólne dla całego serwisu do plików php i "includowanie" tego cuda.
Napisałem już parę stron w ten sposób i nie było problemów jednak dzisiaj siedzę cały dzień i nie mogę ogarnąć... nawet przenosiłem całą stronę po serwerze myśląc, że coś jest nie tak ze ścieżką do pliku, ale to chyba nie to.

Serwer na home.pl

Struktura katalogów:

katalogglowny/index.php
katalogglowny/content/header.php
katalogglowny/content/newsletter/bledy/1.php

Mój kod wygląda tak:

Index.php

<body>
    <?php include_once("analyticstracking.php"); ?>
    <?php include_once("content/header.php"); ?>

    <!-- START   ZAWARTOSC CONTENTU DLA KONKRETNEJ STRONY -->
    <div id="box">

header.php

<div id="header">
    <div id="headercontent">
        <div id="logo">
        </div>
    </div>
</div>

1.php

<body>
    <?php include_once("analyticstracking.php"); ?>
    <?php include_once("content/header.php"); ?>

    <!-- START   ZAWARTOSC CONTENTU DLA KONKRETNEJ STRONY -->

php.ini puste

Kod błędu:

Warning: include_once(analyticstracking.php) [function.include-once]: failed to open stream: No such file or directory in /*/*/*/webpage/content/newsletter/bledy/1.php on line 11

Warning: include_once() [function.include]: Failed opening 'analyticstracking.php' for inclusion (include_path='.:/:/usr/local/php/pear5') in /*/*/*/webpage/content/newsletter/bledy/1.php on line 11

Warning: include_once(content/header.php) [function.include-once]: failed to open stream: No such file or directory in /*/*/*/webpage/content/newsletter/bledy/1.php on line 12

Warning: include_once() [function.include]: Failed opening 'content/header.php' for inclusion (include_path='.:/:/usr/local/php/pear5') in /*/*/*/webpage/content/newsletter/bledy/1.php on line 12

Index.php znajduje się w katalogu [...]/webpage/
tam też jest podpięta domena

Index.php śmiga, natomiast */bledy/1.php nie...
Sprawdzałem inne moje strony i nigdzie nie zmieniałem ścieżek do includowanych plików.
Co jest nie tak? inne strony spokojnie śmigają...

link http://www.*.net.pl/content/newsletter/bledy/1.php

Gdzieś na forum znalazłem odniesienie do include_path ale za chorobe nie potrafię tego rozgryźć...

dodanie znaczników <code>, <code class="xml"> i `` - furious programming

edytowany 5x, ostatnio: Piotr Celej, 2014-04-22 09:57

Pozostało 580 znaków

2014-03-27 09:38
tr
0

W pliku 1.php musisz podać ścieżki względem tego pliku a nie katalogu głównego. Include path jak ustawisz na katalog glowny, to wtedy php wie, że ma tam też szukać i powinno działać (to jest drugie rozwiązanie). Tu masz funkcję do ustawienia include path: http://pl1.php.net/set_include_path

Pozostało 580 znaków

2014-03-27 09:55
0

@tr: źle mówisz. include wyszukuje względem WYWOŁANEGO pliku, więc w przypadku gdy index wywołuje a.php, który próbuje wywołać b.php - to ścieżka do b.php musi byc podana relatywnie do indexu.
można użyć dirname(_FILE_), żeby szukać od aktualnego pliku


Pozostało 580 znaków

2014-03-27 10:01
tr
0

hmm racje poknociło mi się, niemniej jednak nie wiadomo gdzie ten 1.php jest includowany i tu bym szukał błędu. Ewentualnie tak jak @dzek69 powiedział, dirname(FILE) i potem sciezka względna

Pozostało 580 znaków

2014-03-27 10:51
0

z tego co kojażę to należy się cofnąć o dwa katalogi z pliku 1.php, do katalogu głównego, ale próbowałem podać ścieżke bezwzględną tj.

1.php

<body>
    <?php include_once("analyticstracking.php"); ?>
    <?php include_once("http://www.*.net.pl/content/header.php"); ?>

    <!-- START     ZAWARTOSC CONTENTU DLA KONKRETNEJ STRONY -->

i ciągle nie działa.

chodzi o zastosowanie dirname(FILE) w ten sposób:

<?php include_once("dirname(http://www.*.net.pl/content/header.php"); ?>

?

Pozatym właśnie staram się wyciągnąć od serwera ścieżkę poprzez funkcję "get_include_path" i echo, i mam na stronie taką ścieżkę:
".:/:/usr/local/php/pear5". z Manuala nie rozumiem z którego miejsca prowadzi... czy z głównego katalogu serwera czy z głównego katalogu strony.

a strona o której mowa tj. 1.php ma być wywoływana przez freshmail'a, ale to nie powinno mieć chyba znaczenia

edytowany 6x, ostatnio: Piotr Celej, 2014-05-12 00:00

Pozostało 580 znaków

2014-03-27 11:12

Gdyby Bóg był sprawiedliwy to by Cię dawno rąbnął piorunem o.O

Includowanie plików z zewnątrz ("http") nie zadziała w domyślnej konfiguracji, rzuci też ostrzeżenie, ale Ty ostrzeżenia ukrywasz i masz gdzieś (na serwerze zdalnym zapewne się logują do pliku - zajrzyj tam).
Drugi kawałek kodu to w ogóle majstersztyk - błąd składniowy połączony z podawaniem funkcji z parametrami jako string o.O

w 1.php:

// .. - bledy
// ../.. - newsletter
// ../../.. - content
include_once("../../../header.php");

dirname nie będzie potrzebny, z początku myślałem, że includujesz 1.php z poziomu index, a tu jednak nie jak się przyjrzałem.


Pozostało 580 znaków

2014-03-27 11:20
0

Ucze się :)

po rozczytaniu manuala zmontowałem dirname tak jak powinno być, a Bóg powinien trzaskać piorunami bez przerwy :)

pokombinowałem i zrobiłem przekierowanie z separacją serwisu (znów) i dodałem "/" przy
katalogglowny/content/newsletter/bledy/1.php

<?php 
    include_once("/analyticstracking.php");
    include_once('/content/header.php'); 
?>

aktualnie śmiga, tylko nie wiem czy nie mam więcej rażących błędów :)

Dziękuję :)

edytowany 1x, ostatnio: furious programming, 2014-03-27 16:24

Pozostało 580 znaków

2014-03-27 11:38
0

to Ci niby działa o.O
to jakoś magicznie skonfigurowany php
nie zadziała to na jakimkolwiek innym serwerze

ścieżka zaczynająca się od "/" będzie szukać od korzenia na dysku, nie korzenia wirtualnego hosta domeny


Pozostało 580 znaków

2014-03-27 11:41
0

może home.pl jest magiczny :)

Zastanawiam się czy walczyć dalej czy zostawić bo działa

Pozostało 580 znaków

2014-03-27 11:43
0

Zrób to porządnie, tak jak powinno być. W razie przenoszenia gdzieś indziej nie będziesz musiał znów poprawiać.


Pozostało 580 znaków

2014-03-27 11:47
0

Ok, zastanawia mnie tylko sposób bezwzględnego podania adresu pliku.
Chodzi mi o to, że jak tworzę ręcznie dość skomplikowaną strukture katalogów to wszystkie ścieżki muszę poprawiać.

Czy da się to jakoś prościej zrobić?

podawanie adrsu http://... mnie nie bawi bo zdarza się, że adres jest zmieniany
myślałem o funkcji $_SERVER('PHP_SELF'), ale zwraca on dokładnie adres strony na której jest wykonywany,
może $_SERVER_ADDR?

edytowany 2x, ostatnio: Piotr Celej, 2014-03-27 11:52

Pozostało 580 znaków

Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0