Synology-Forum.nl

Overige software => Web Station => Topic gestart door: mistervink op 04 september 2017, 18:09:38

Titel: set root doc persoonlijke webpagina
Bericht door: mistervink op 04 september 2017, 18:09:38
Hi there  :)

kan iemand mij helpen de volgende vraag te beantwoorden:
bij gebruik van de "include" functie met PHP,
zou de "/" ervoor moeten zorgen dat er vanaf de root begonnen moet aan de structuur.
Standaard is ingesteld dat de root "/var/services/web" is. (echo $_SERVER["DOCUMENT_ROOT"])
Nu wil ik graag, dat per gebruiker, de root, de www map van de gebruiker is.
Maar waar of hoe kan ik dat instellen?

Alvast bedankt!
Titel: Re: set root doc persoonlijke webpagina
Bericht door: Briolet op 04 september 2017, 18:14:29
Is dat niet ~/ in Linux ?

of iets van ~/web in dit geval
Titel: Re: set root doc persoonlijke webpagina
Bericht door: Wyodor op 04 september 2017, 20:27:28
Om de www map in de Home directory van een gebruiker als root te gebruiken doe ik het volgende.

1. Schakel personal webserver uit. Dus geen http://domain/~gebruiker mogelijk.

2. Maak in de web map een map aan met de gebruikersnaam.

3. Maak een virtual host aan voor die gebruiker en kies de map die in 2 is aangemaakt. Bijvoorbeeld gebruiker.domein.nl

4. Wis de map die in 2 is aangemaakt.

5. Maak een symbolic link aan naar de www map van de gebruiker en geef het de naam van de map die je in 2 hebt aangemaakt, in 3 hebt gekozen en in 4 hebt gewist.

ln -s /volume1/homes/gebruikersnaam/www/ gebruiker
6. Nu kan je als url http://gebruiker.domein.nl gebruiken.

7. De www map is nu de root van de url in 6.
Titel: Re: set root doc persoonlijke webpagina
Bericht door: Wyodor op 04 september 2017, 20:36:19
Hier een zooi code om zo'n beetje alle php variabelen te bekijken. Plak het in een php bestand.


<style>

code {color: red;}

</style>

<?php

echo "Hostname (n) : <code>" . @php_uname(n) . "</code><br />\n";

if (
function_exists'shell_exec' )) {
echo "Hostname : <code>" . @gethostbyname(trim(`hostname`)) . "</code><br />\n";
}
else {
echo "Server IP : <code>"$_SERVER['SERVER_ADDR'] . "</code><br />\n";
}
echo 
"Platform (s) : <code>" . @php_uname(s) . "</code>, (r) : <code>" . @php_uname(r) . "</code>, (v) : <code>" . @php_uname(v) . "</code><br />\n";
echo 
"Architecture (m) : <code>" . @php_uname(m) . "</code><br />\n";
echo 
"Username : <code>" get_current_user () . "</code> ( UiD: <code>" getmyuid() . "</code>, GiD: <code>" getmygid() . "</code> )<br />\n";
echo 
"Curent Path (getcwd) : <code>" getcwd () . "</code><br />\n";
echo 
"--FILE-- : <code>" __FILE__ "</code><br />\n";
echo 
"dirname FILE : <code>" dirname(__FILE__) . "</code><br />\n";
echo 
"basename FILE : <code>" basename(__FILE__) . "</code><br />\n";
echo 
"dirname SCRIPT_NAME : <code>" dirname($_SERVER["SCRIPT_NAME"]) . "</code><br />\n";
echo 
"basename SCRIPT_NAME : <code>" basename($_SERVER["SCRIPT_NAME"]) . "</code><br />\n";
echo 
"<hr>";

$path_parts pathinfo(__FILE__);

echo 
'$path_parts = <code>pathinfo(__FILE__)</code><br />' "\n";

echo 
'$path_parts[' "'dirname']'" "<br />\n";

echo 
"dirname : <code>" $path_parts['dirname'], "</code><br />\n";
echo 
"basename : <code>" $path_parts['basename'], "</code><br />\n";
echo 
"extension : <code>" $path_parts['extension'], "</code><br />\n";
echo 
"filename : <code>" $path_parts['filename'], "</code><br />\n"// since PHP 5.2.0

echo "<hr>";

echo 
'<p>All names have prefix <b>$_SERVER["name"]</b></p>';

echo 
"USER                           " " : <code>" $_SERVER["USER"] . "</code><br />\n";
echo 
"HOME                           " " : <code>" $_SERVER["HOME"] . "</code><br />\n";
echo 
"FCGI_ROLE                      " " : <code>" $_SERVER["FCGI_ROLE"] . "</code><br />\n";
echo 
"REDIRECT_MOD_X_SENDFILE_ENABLED" " : <code>" $_SERVER["REDIRECT_MOD_X_SENDFILE_ENABLED"] . "</code><br />\n";

echo 
"REDIRECT_HANDLER               " " : <code>" $_SERVER["REDIRECT_HANDLER"] . "</code><br />\n";
echo 
"REDIRECT_STATUS                " " : <code>" $_SERVER["REDIRECT_STATUS"] . "</code><br />\n";

echo 
"MOD_X_SENDFILE_ENABLED         " " : <code>" $_SERVER["MOD_X_SENDFILE_ENABLED"] . "</code><br />\n";
echo 
"HTTP_HOST                      " " : <code>" $_SERVER["HTTP_HOST"] . "</code><br />\n";

echo 
"HTTP_USER_AGENT                " " : <code>" $_SERVER["HTTP_USER_AGENT"] . "</code><br />\n";
echo 
"HTTP_ACCEPT                    " " : <code>" $_SERVER["HTTP_ACCEPT"] . "</code><br />\n";

echo 
"HTTP_ACCEPT_LANGUAGE           " " : <code>" $_SERVER["HTTP_ACCEPT_LANGUAGE"] . "</code><br />\n";
echo 
"HTTP_ACCEPT_ENCODING           " " : <code>" $_SERVER["HTTP_ACCEPT_ENCODING"] . "</code><br />\n";

echo 
"HTTP_CONNECTION                " " : <code>" $_SERVER["HTTP_CONNECTION"] . "</code><br />\n";
echo 
"PATH                           " " : <code>" $_SERVER["PATH"] . "</code><br />\n";

echo 
"SERVER_SIGNATURE               " " : <code>" $_SERVER["SERVER_SIGNATURE"] . "</code><br />\n";
echo 
"SERVER_SOFTWARE                " " : <code>" $_SERVER["SERVER_SOFTWARE"] . "</code><br />\n";

echo 
"SERVER_NAME                    " " : <code>" $_SERVER["SERVER_NAME"] . "</code><br />\n";
$ip_server $_SERVER["SERVER_ADDR"];

if (!
filter_var($ip_serverFILTER_VALIDATE_IPFILTER_FLAG_IPV6) === false) {
    
$ip_server_echo "is a valid IPv6 address";
} elseif (!
filter_var($ip_serverFILTER_VALIDATE_IPFILTER_FLAG_IPV4) === false) {
    
$ip_server_echo "is a valid IPv4 address";
}
echo 
"SERVER_ADDR                    " " : <code>" $_SERVER["SERVER_ADDR"] . "</code> $ip_server_echo<br />\n";
echo 
"SERVER_PORT                    " " : <code>" $_SERVER["SERVER_PORT"] . "</code><br />\n";

$ip_remote $_SERVER["REMOTE_ADDR"];

if (!
filter_var($ip_remoteFILTER_VALIDATE_IPFILTER_FLAG_IPV6) === false) {
    
$ip_remote_echo "is a valid IPv6 address";
} elseif (!
filter_var($ip_remoteFILTER_VALIDATE_IPFILTER_FLAG_IPV4) === false) {
    
$ip_remote_echo "is a valid IPv4 address";
}
echo 
"REMOTE_ADDR                    " " : <code>" $_SERVER["REMOTE_ADDR"] . "</code> $ip_remote_echo<br />\n";

echo 
"DOCUMENT_ROOT                  " " : <code>" $_SERVER["DOCUMENT_ROOT"] . "</code><br />\n";
echo 
"SERVER_ADMIN                   " " : <code>" $_SERVER["SERVER_ADMIN"] . "</code><br />\n";

echo 
"SCRIPT_FILENAME                " " : <code>" $_SERVER["SCRIPT_FILENAME"] . "</code><br />\n";
echo 
"REMOTE_PORT                    " " : <code>" $_SERVER["REMOTE_PORT"] . "</code><br />\n";

echo 
"REDIRECT_URL                   " " : <code>" $_SERVER["REDIRECT_URL"] . "</code><br />\n";
echo 
"GATEWAY_INTERFACE              " " : <code>" $_SERVER["GATEWAY_INTERFACE"] . "</code><br />\n";

echo 
"SERVER_PROTOCOL                " " : <code>" $_SERVER["SERVER_PROTOCOL"] . "</code><br />\n";
echo 
"REQUEST_METHOD                 " " : <code>" $_SERVER["REQUEST_METHOD"] . "</code><br />\n";

echo 
"QUERY_STRING                   " " : <code>" $_SERVER["QUERY_STRING"] . "</code><br />\n";
echo 
"REQUEST_URI                    " " : <code>" $_SERVER["REQUEST_URI"] . "</code><br />\n";

echo 
"SCRIPT_NAME                    " " : <code>" $_SERVER["SCRIPT_NAME"] . "</code><br />\n";
echo 
"ORIG_SCRIPT_FILENAME           " " : <code>" $_SERVER["ORIG_SCRIPT_FILENAME"] . "</code><br />\n";

echo 
"ORIG_PATH_INFO                 " " : <code>" $_SERVER["ORIG_PATH_INFO"] . "</code><br />\n";
echo 
"ORIG_PATH_TRANSLATED           " " : <code>" $_SERVER["ORIG_PATH_TRANSLATED"] . "</code><br />\n";

echo 
"ORIG_SCRIPT_NAME               " " : <code>" $_SERVER["ORIG_SCRIPT_NAME"] . "</code><br />\n";
echo 
"PHP_SELF                       " " : <code>" $_SERVER["PHP_SELF"] . "</code><br />\n";

echo 
"REQUEST_TIME_FLOAT             " " : <code>" $_SERVER["REQUEST_TIME_FLOAT"] . "</code><br />\n";
echo 
"REQUEST_TIME                   " " : <code>" $_SERVER["REQUEST_TIME"] . "</code><br />\n";

?>
Titel: Re: set root doc persoonlijke webpagina
Bericht door: mistervink op 05 september 2017, 11:35:53
Beste Wyodor,
allereerst erg bedankt voor je reactie  :)

ik heb je instructie stap voor stap uitgevoerd,
ik krijg helaas een error 404.

1. Schakel personal webserver uit. Dus geen http://domain/~gebruiker mogelijk.
- check

2. Maak in de web map een map aan met de gebruikersnaam.
- check, map genaamd "test"

3. Maak een virtual host aan voor die gebruiker en kies de map die in 2 is aangemaakt.
- check, naamgebaseerd, test.mistervink.synology.me, documenthoofdmap: "web/test",
   poort: 80 / 443, back-end: Nginx, PHP 7.0

4. Wis de map die in 2 is aangemaakt.
- check, "web/test" verwijderd

5. Maak een symbolic link aan naar de www map van de gebruiker en geef het de naam van de map die je in 2 hebt aangemaakt, in 3 hebt gekozen en in 4 hebt gewist.
- check, ln -s /volume2/homes/test/www test

6. Nu kan je als url http://gebruiker.domein.nl gebruiken.
check, test.mistervink.synology.me

- in de map homes/test/www een index.php aangemaakt <?php echo "Hallo!";

- resultaat: error 404
(- de documenthoofdmap van de virtuele host is nu leeg, gezien die map is verwijderd..)

enig idee waar ik iets verkeerd doe?
Titel: Re: set root doc persoonlijke webpagina
Bericht door: mistervink op 05 september 2017, 11:38:12
ow,
vergeet bij stap 5 de laatste /
commando was:
ln -s /volume2/homes/test/www/ test
Titel: Re: set root doc persoonlijke webpagina
Bericht door: mistervink op 06 september 2017, 11:45:37
Hi there  :)

okay, de symbolic link werkt nu.
maar...
ik krijg de volgende melding:
Warning: include(/test/test.php): failed to open stream: No such file or directory in /volume2/homes/mistervink/www/index.php

index.php
<?php
include '/test/test.php';

test/test.php
<?php
echo "test";

ik kan wel zien dat de $_SERVER["DOCUMENT_ROOT"] is veranderd van
/var/services/web
naar
/volume2/web/mistervink

iemand een idee?
Titel: Re: set root doc persoonlijke webpagina
Bericht door: Wyodor op 06 september 2017, 12:17:14
Om vanuit de www map van mistervink een bestand uit de www map van test te gebruiken, moet je het hele path naar test.php gebruiken :

/volume2/web/test/test.php
Of als er geen symbolic link is in de web map :

/volume2/homes/test/www/test.php
Titel: Re: set root doc persoonlijke webpagina
Bericht door: mistervink op 06 september 2017, 13:05:02
hey Wyodor,
bedankt voor je reactie  :)

deze werkt inderdaad wel:
include '/volume2/homes/mistervink/www/test/test.php';

ik ben nu dus op zoek om het volgende te laten werken:
include '/test/test.php';

mocht ik dan ooit een site willen verplaatsen of ergens anders hosten,
dan hoef ik niet alle "includes" en "requires" aan te passen.

is dat mogelijk?
Titel: Re: set root doc persoonlijke webpagina
Bericht door: Wyodor op 06 september 2017, 14:31:24
Ik ging ervan uit dat met /test/test.php de www map van gebruiker test werd bedoeld.

Als /test/test.php in de www map van mistervink zit, gebruik dan dit :

<?php
include( $_SERVER['DOCUMENT_ROOT'] . '/test/test.php' );
?>
Titel: Re: set root doc persoonlijke webpagina
Bericht door: mistervink op 07 september 2017, 13:38:22
Hey Wyodor,

wederom bedankt voor je tijd en reactie  :)
waardeer ik enorm!

Ik was een beetje aan het wisselen en uitproberen tussen de mappen "test" en "mistervink",
(uiteindelijk zou dit niet moeten uitmaken voor wat ik voor elkaar wil krijgen).

Je antwoorden werken allemaal wel, supergoed en dank je wel!
Als ik het dus goed begrijp,
het is dus niet mogelijk om alleen
include '/test/test.php';
te gebruiken,
we blijven dus altijd afhankelijk van de $_SERVER["DOCUMENT_ROOT"].