Skocz do zawartości

Localhost: include z innego dysku (w subfolderze)


vladimir

Rekomendowane odpowiedzi

Witam, mam następujący problem:

Mówiąc w skrócie: jak ustawić (gdziekolwiek) żeby na LOCALHOST przy inkludowaniu "/" wskazywało na DocumentRoot zamiast katalogu główny dysku?

A teraz więcej szczegółów:

Mam zainstalowane PHP i Apache na dysku C:

Moje lokalne strony przechowuję na dysku D:, co gorsza - w subfolderze oczywiście :)

Nie działa mi niestety inkludowanie plików z "/" na początku; tytułem wstępu:

httpd.conf

DocumentRoot "d:/www/abcd/"

// tutaj skopiowałem domyślne ustawienia dla folderu z lokalnymi stronami
<Directory "d:/www/abcd/*">
AllowOverride All
Options MultiViews Indexes Includes ExecCGI FollowSymLinks
<Limit GET POST OPTIONS PROPFIND>
	Order allow,deny
	Allow from all
</Limit>
<LimitExcept GET POST OPTIONS PROPFIND>
	Order deny,allow
	Deny from all
</LimitExcept>
</Directory>

php.ini - próbowałem też szukać szczęścia tymi wpisami ale to nic nie dało :|

include_path =".;d:\www\abc";

doc_root = "d:\www\abc";

czyli mam https://localhost == d:/www/abcd/index.php.

Kiedy na dowolnej stronie próbuję wywołać coś w stylu

include("/plik.php");

to wtedy serwer próbuje mi szukać plik.php w D:\ zamiast D:\www\abc

Na serwerze wszystko jest w porządku, bo "/" odnosi się do folderu głównego serwera, gdzie mam wszystkie pliki w folderach, na localhoście natomiast "/" nie odwołuje się do DocumentRoot, ale katalogu głównego dysku.

Chciałbym uniknąć inkludowania w stylu include($SCIEZKA."nazwapliku") - czy jest jakaś możliwość, aby ustawić szukanie inkludów na "d:/www/abcd" ? Jak już pisałem, w PHP.ini dopisałem include_path =".;d:\www\abc"; (oczywiście nie ma średnika na początku linijki) i dostaję standardowe błędy no such file or directory. Definiowany w PHP.ini "include_path" niestety też odnosi się tylko do dołączania "plik.php", a nie działa w wypadku "/plik.php" (sprawdzałem tworząc plik o egzotycznej nazwie w egzotycznym folderze na dysku F: :)

Generalnie trochę niepokoi mnie komentarz z php.ini:

; UNIX:[b] "/path1:/path2" [/b] Windows:[b] "\path1;\path2"[/b]
include_path =".;d:\www\abcd";

Wynikałoby z tego że można tam zdefiniować tylko ścieżki na C:. W takim wypadku ewentualnie ustawienie c:/moj-dowolny/folder też nie byłoby złe :)

Jeśli ktoś doczytał tego posta do końca to gratuluję cierpliwości, a teraz czekam na jakieś porady... :)

Pozdrawiam

Odnośnik do komentarza
Udostępnij na innych stronach

Z całą pewnością coś źle robisz....

https://pl.php.net/ini.core

Example I.1. Unix include_path

include_path=".:/php/includes"

Example I.2. Windows include_path

include_path=".;c:\php\includes"

W Example nie ma średników na zakończeniu a Ty widzę dawałeś, może to jest przyczymą, że u Ciebie nie dziala ...

Lokalnie powinna zadziałać funkcja ini_set("include_path", "/jakis_katalog");

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Jak dla mnie to include jako parametr przyjmuję scięzkę do pliku według systemu plików jaki masz na serwerze

czyli

include('c:\www\php\skrypty\1.php');

lub

include('/www/skrypty/1.php');

Jezelij dopisujesz do php.ini

include_path ="d:\www\abc"

to potem mozesz wczytywać pliki php z tego katalogu bez wskazywania ściezki np. include('1.php');

Odnośnik do komentarza
Udostępnij na innych stronach

Dokładnie tak. Ścieżka include "mówi" maszynie PHP od jakiego miejsca ma zacząć przeszukiwanie. Jeśli nie znajdzie plików w katalogu zdefiniowanym w include_path szuka dalej w tym z którego następuje wywołanie skryptu PHP.

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Zgadza się wszystko co piszecie, ale dla inkludowania "plik.php". Jak wywołuję include "/plik.php" to czego bym nie próbował, szuka danego pliku tylko i tylko w głównym katalogu bieżącego dysku, czyli D:/plik.php.

Próbowałem używać

ini_set("include_path",$sciezka);

gdzie $sciezka po kolei wrzucałem /, \, D:/www/abcd, D:/www/abcd/, D:\www\abcd\, D:\www\abcd i nic z tego

Example I.2. Windows include_path

include_path=".;c:\php\includes"

W Example nie ma średników na zakończeniu a Ty widzę dawałeś, może to jest przyczymą, że u Ciebie nie dziala ...

ze średnikiem czy bez średnika nie ma różnicy.

Wygląda na to, że nie da się oszukać serwera i "/" na początku zawsze wskazuje dysk :D Pozostaje więc inkludować względnymi ścieżkami (plik.php albo ../../plik.php zamiast /plik.php) bo przenosić strony na główny folder dysku nie zamierzam :D

Trochę zamieszanie jest przez to, że w edycji źródła stricte html-owego dołączanie obrazków, css-ów, skryptów, wklejanie hrefów itd. przez "/obrazek.jpg", "/strona.htm" działa, bo jest ono interpretowane już jako ścieżki html-owe z przeglądarki i "/" oznacza "https://localhost/", natomiast inkludowanie przetwarza interpreter PHP, który odnosi się do dysku.

Odnośnik do komentarza
Udostępnij na innych stronach

Wygląda na to, że nie da się oszukać serwera i "/
Wygląda na to, że nadal robisz coś źle! Nie po to jest zaimplementowana ta dyrektywa aby NIE działała... :D

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

A dlaczego uparles sie na ten / na poczatku ?

Jest kolosalna roznica pomiedzy /plik.php a plik.php w include

Jezeli piszesz /plik.php to php rozumie to tak ze wpisales bezwzgledna sciezke do pliku plik.php i plik ten znajduje sie w katalogu /

/ == d:\ na twoim komputerze i dlatego to tak wychodzi

include_path nijak sie ma do tego co chcesz zrobic

Mozliwe jest to ze jak ustawia sie w APACHE

DocumentRoot "d:/www/abcd/"

To PHP intepretuje / jako d:\

Zreszta mozna moja teze bardzo szybko udowodnic albo obalic.

Moja rada

include(JAKAS_STALA_ZDEFINIOWANA_W_PHP."plik.php");

I po robocie :D

Odnośnik do komentarza
Udostępnij na innych stronach

A dlaczego uparles sie na ten / na poczatku ?
Chodzi o to że mam rozbudowaną strukturę folderów i w różnych miejscach chcę się odnieść do adresu głównego serwera, a jak użyję "/" to nie muszę sprawdzać czy jestem 2, 3 czy 5 folderów zagłębiony.

Również o to, że na serwerze są już pliki z odniesieniami "/", więc nie chciałbym zmieniać teraz.

Jest kolosalna roznica pomiedzy /plik.php a plik.php w include

Jezeli piszesz /plik.php to php rozumie to tak ze wpisales bezwzgledna sciezke do pliku plik.php i plik ten znajduje sie w katalogu /

/ == d:\ na twoim komputerze i dlatego to tak wychodzi

no właśnie o to mi chodzi, dlatego założyłem ten wątek :)

Mozliwe jest to ze jak ustawia sie w APACHE

DocumentRoot "d:/www/abcd/"

To PHP intepretuje / jako d:\

no dokładnie tak jest.
include(JAKAS_STALA_ZDEFINIOWANA_W_PHP."plik.php");

Myślałem nad takim rozwiązaniem na początku, ale wtedy nie wiedziałem że można wywołać na localhoście include("d:\jakisfolder\mojplik")

Teraz możnaby zrobić tak:

na localhoście STAŁA = D:\www\abcd\

na serwerze STAŁA = \

z tym że aby te same stałe konfiguracyjne wszędzie wrzucić, to przydałoby się wszędzie wklejać stałą albo (żeby łatwo zmienić)... zainkludować w każdym skrypcie jakiś plik config.php ;P a wtedy jeśli wiem jaka jest do niego ścieżka to bez sensu jest go inkludować żeby podać ścieżkę dla innych plików :)

A póki nie inkluduję po 30 plików w jednym skrypcie to nie ma sensu się rozdrabniać.

Odnośnik do komentarza
Udostępnij na innych stronach

zobacz jak działa Wordpress, tam zawsze wczytywany jest jako pierwszy wp-config.php

definiujcy stałą ABSPATH ,jeżeli jakiś plik chce zainkludowac inny plik to względem tej stałej

plik: wp-config.php

define('ABSPATH', dirname(__FILE__).'/');
require_once(ABSPATH.'wp-settings.php');

jakis inny plik

require_once(ABSPATH . 'wp-content/plugins/polyglot_getLang.php');

Nie wiem co chesz zrobić ale zakładanie za dużej ilości katalogów to krecenie na siebie bicza.

Im coś jest prostsze tym lepsze.

Trzeba tylko zanim się zacznie pisać troche przenalizowac co bedzie jak zrobimy tak a co bedzie jak inaczej.

Ewentualnie kopiować od najlepszych czyli tych którzy na swoich skryptach zarobili miliony $$$

Ja tam preferuje drugie rozwiazanie :)

Ewentualnie zapraszam na konsultacje :)

Odnośnik do komentarza
Udostępnij na innych stronach

jak na mój gust ścieżka zaczynająca się od "/" lub "\" zależnie od systemu bedzie odwoływać się na szczytu struktury plików w sposób bezwzględny (jest to ścieżka bezwzględna zresztą jak pisali przedmowcy) Zrób tak jak proponowali ze stałą może w ten sposób określić bezwzględnie folder na serverze do którego potem się względnie odnosisz zaleznie co potrzebujesz dodając fragment względny lub bez niego (sciezki względnej) odwołasz się do szczytu twojej struktury.Daje to dodatkowy plus w jednym miejscu definujesz strukture folderów jakiej używasz gdy przeniesiesz swoje dzieło na inny serwer inaczej skonfigurowany zmieniasz jedną rzecz i wszystko działa

pozdro

IE to taki program, który pozwala na oglądanie internetu z Twojego komputera i odwrotnie...

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności