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

include i include path - błąd function.include
Piotr Celej
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 11 lat
  • Postów:5
0

Cześć wszystkim :)

Już parę lat zajmuje się HTML'em i CSS'em, ale PHP itp. to jak na razie 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:

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

Mój kod wygląda tak:

Index.php

Kopiuj
<body>
	<?php include_once("analyticstracking.php"); ?>
	<?php include_once("content/header.php"); ?>
	
	<!-- START	 ZAWARTOSC CONTENTU DLA KONKRETNEJ STRONY -->
	<div id="box">

header.php

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

1.php

Kopiuj
<body>
	<?php include_once("analyticstracking.php"); ?>
	<?php include_once("content/header.php"); ?>
	
	<!-- START	 ZAWARTOSC CONTENTU DLA KONKRETNEJ STRONY -->

php.ini puste

Kod błędu:

Kopiuj
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
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

dzek69
Moderator
  • Rejestracja:ponad 18 lat
  • Ostatnio:około 21 godzin
  • Lokalizacja:Rzeszów
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


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

Piotr Celej
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 11 lat
  • Postów:5
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

Kopiuj
<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:

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

?

poza tym 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
dzek69
Moderator
  • Rejestracja:ponad 18 lat
  • Ostatnio:około 21 godzin
  • Lokalizacja:Rzeszów
0

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:

Kopiuj
// .. - 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.


Piotr Celej
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 11 lat
  • Postów:5
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

Kopiuj
<?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: flowCRANE
dzek69
Moderator
  • Rejestracja:ponad 18 lat
  • Ostatnio:około 21 godzin
  • Lokalizacja:Rzeszów
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


Piotr Celej
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 11 lat
  • Postów:5
0

może home.pl jest magiczny :)

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

freemp3
  • Rejestracja:około 11 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Miechów
  • Postów:284
0

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


Piotr Celej
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 11 lat
  • Postów:5
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
freemp3
  • Rejestracja:około 11 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Miechów
  • Postów:284
0

Czemu się tak uczepiłeś tego http? Zostaw to w spokoju. Do pobrania adresu bezwzględnego możesz wykorzystać funkcję dirname - tak jak napisał @dzek69.
Ponad to słowo klucz na dzisiaj:

Kopiuj
__FILE__

edytowany 1x, ostatnio: freemp3
dzek69
Moderator
  • Rejestracja:ponad 18 lat
  • Ostatnio:około 21 godzin
  • Lokalizacja:Rzeszów
0

$_SERVER["DOCUMENT_ROOT"] powinien zawierać ścieżkę absolutną do korzenia domeny.

Oczywiście odpowiednio skopany serwer wskazuje inną ścieżkę :/

Generalnie najlepiej pisać stronki tak, że ZAWSZE wywołujesz index.php - a ten na podstawie parametrów odbiera i przetwarza dane i podejmuje decyzje co zwrócić. Wtedy nie ma problemów z includowaniem, bo zawsze podajesz ścieżkę relatywną od index. A i wiele innych zalet jest (tak jak łamane przez Ciebie DRY)

Edit: z http NIGDY Ci to nie zadziała. PHP pobiera wtedy stronę jak przeglądarka i wykonuje kod. Jak Ty wbijesz w przeglądarkę ten adres to nie widzisz kodu PHP tylko wynik działania. NIGDY pobieranie przez http nie przydaje się z include. Jak ktoś twierdzi inaczej to zastrzel, zanim się rozmnoży.


edytowany 1x, ostatnio: dzek69
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)