automatisch bestand zoeken op server

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ozzie PHP

Ozzie PHP

11/04/2011 15:58:00
Quote Anchor link
Hallo,

Hoop dat iemand me kan helpen. Ik wil vanuit index.php een script maken dat automatisch naar een bestand zoekt op een hoger niveau van de server. Laten we dit bestand voor het gemak even test.php noemen.

Wat ik wil is dat als index.php wordt aangeroepen er automatisch gezocht wordt naar test.php en dan eerst op 1 niveau hoger dan waar de index staat. Ik zou dan willen dat op dat hogere niveau alle folders worden gescand of het bestand test.php er in staat. Zo nee, dan moet automatisch een niveau hoger worden gezocht in alle directories. Als daar ook niks wordt gevonden dan moeten de directories in 1 niveau hoger weer worden gescand, net zo lang tot het bestand test.php uiteindelijk is gevonden. Iemand een idee hoe ik dit kan aanpakken? Alvast bedankt!
Gewijzigd op 11/04/2011 15:58:55 door Ozzie PHP
 
PHP hulp

PHP hulp

22/12/2024 07:44:05
 
Ozzie PHP

Ozzie PHP

14/04/2011 12:05:57
Quote Anchor link
Niemand enig idee, of is mijn vraag niet duidelijk?
 
- SanThe -

- SanThe -

14/04/2011 12:13:29
Quote Anchor link
Zo ga je dus zoeken op plaatsen waar een gebruiker niet hoort te komen. Ik weet niet wat je van plan bent, maar het lijkt mij niet slim.
 
Phpnuke r

phpnuke r

14/04/2011 12:14:44
Quote Anchor link
Bedoel jedit?

>Maak een array met de maps die je hebt in niveaus
>met behulp van een while ga je de hele array af tot je hem hebt gevonden met files_get_contents:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
$array
    = array();
$array[1] = './';
$array[2] = './forum';
$array[3] = './forum/images';
$current  = 1;
$end      = 0;
while($end==0)
{

    $search = file_get_contents($array[$current].'/test.php');
    if(!$search==null)
    {

        echo "test.php staat in ".$array[$current];
        $end = 1;
    }

    else
    {
        $current++;
     }
}

?>


NOTE: Dit is niet getest, ik ben op school dus heb geen php server en weet dus niet of het werkt. Error report op géén anders krijg je elke keer als je hem niet vind een error :P
Gewijzigd op 14/04/2011 12:17:58 door phpnuke r
 
Ozzie PHP

Ozzie PHP

14/04/2011 12:38:21
Quote Anchor link
Dank voor de eerste reacties.

Ik zal een beetje proberen uit te leggen wat ik bedoel. Ik wil een framework maken. De bestanden van dit framework wil ik op het beveiligde deel van een server zetten (het gedeelte waar je via de browser niet bij kunt komen). De bestanden van het framework wil ik in een directory "framework" zetten. Afhankelijk van wat voor server het is (prive, shared host, windows, apache) kan de directory "framework" op verschillende locaties komen te staan. Nu wil ik dat vanuit het (publiek toegankelijke) index.php bestand automatisch gezocht wordt naar de directory "framework" die dus ergens op de server staat. De handigste manier lijkt me om vanaf het publieke niveau (httpdocs) 1 niveau omhoog te gaan en daar dan te gaan zoeken naar de directory "framework". Bestaat die directory niet, dan moeten alle andere directories op datzelfde niveau doorzocht worden op de directory "framework". Wordt ook nu de directory "framework" niet gevonden, dan moet er weer 1 niveau hoger gezocht worden enz.

Stel dat het bestand index.php zich op de onderstaande locatie bevindt:
server/mijnsite/httpdocs/index.php

De directory "framework" zou zich dan bijvoorbeeld op de 3 volgende locaties kunnen bevinden:

server/mijnsite/private/framework
of
server/mijnsite/framework
of
server/framework

In al deze gevallen moet index.php de directory "framework" automatisch kunnen zoeken.

Is het zo duidelijk wat ik bedoel? Alvast bedankt voor de hulp!
Gewijzigd op 14/04/2011 12:40:13 door Ozzie PHP
 
Phpnuke r

phpnuke r

14/04/2011 14:08:23
Quote Anchor link
Je kan in de array alle mappen van je website/dergelijk zetten, maar ik weet niet of je met php directories kan bezoeken.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
$array
    = array();
$array[1] = './framework';
$array[2] = '../framework';
$array[3] = '../../framework';
$current  = 1;
$end      = 0;
while($end==0)
{

    $search = file_get_contents($array[$current].'/test.php');
    if(!$search==null)
    {

        echo "test.php staat in ".$array[$current];
        $end = 1;
    }

    else
    {
        $current++;
     }
}

?>


Of je zou in de while telkens automatisch ../ aan een variable kunnen toevoegen, dus zo:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
$root
= 'framework';
$limit = 0;
$end      = 0;
while($end==0)
{

    $search = file_get_contents($root.'/test.php');
    if(!$search==null)
    {

        echo "test.php staat in ".$array[$current];
        $end = 1;
    }

    else
    {
        if($limit==3)  //Maximale hoogte
        {
            echo "File test.php not found";
            $end = 1;
        }

        else
        {
            $root = '../'.$root; //Zoals je zei een stapje hoger
            $limit++;
        }
    }
}

?>


Mijn codes zijn rechtstreeks gemaakt, fouten zitten er hoogstwaarschijnlijk in of nietwerkende stukjes!
Gewijzigd op 14/04/2011 14:10:06 door phpnuke r
 
Ozzie PHP

Ozzie PHP

14/04/2011 14:13:03
Quote Anchor link
Dankjewel Merijn. Dit is alvast een begin :)

Alleen hoe moet ik al die directories doorzoeken vraag ik me af... :-S
Mja... ik ga er nog wel ff mee aan de slag...
 
Phpnuke r

phpnuke r

14/04/2011 14:20:17
Quote Anchor link
No problem,


Als het goed is gaat deze alleen naar beneden, right? Exact zoals je zei, als hij dieper moet gewoon limit in if($limit==3) veranderen. Of moet er meer gebeuren?
 
Ozzie PHP

Ozzie PHP

14/04/2011 14:22:39
Quote Anchor link
Nee, dit is zo ongeveer wel wat het moet doen. Alleen zou het dus kunnen zijn dat "framework" niet in de root staat maar in een andere directory. Als ie 'm in de root niet kan vinden, dan moet ie (de roots van) de directories gaan doorzoeken. Dat doet ie nu nog niet...
 
Phpnuke r

phpnuke r

14/04/2011 14:27:10
Quote Anchor link
Je krijgt dan een vrij grote script, in dat geval zou ik de bovenste nemen en andere waardes toevoegen zoals

$array[1] = './framework';
$array[2] = '../framework';
$array[3] = '../../framework';
$array[4] = '../forum/framework';
$array[5] = '../blog/framework';

Hoewel ik denk dat je beter gewoon de framework directr kunt opnemen zodner dit hele script, ik bedoel waarom moet hij opgezocht worden?(just an tip)

OH: Het script heeft nog geen limiet, als array5 ook niks heeft zal de script zich vast laten lopen, please use a limit :P
 
Ozzie PHP

Ozzie PHP

14/04/2011 14:34:36
Quote Anchor link
Het "probleem" is dat bijvoorbeeld op een windows server met plesk je de prive bestanden in de map "private" moet zetten. Je kunt daar niet zomaar een directory aanmaken. Ik weet van tevoren dus niet exact waar ik het framework moet plaatsen. Daarom wil ik het systeem er automatisch naar laten zoeken. Ik wil niet hardcoded mapnamen gaan opgeven omdat dit per server kan verschillen.
 
Phpnuke r

phpnuke r

14/04/2011 14:36:09
Quote Anchor link
Daar weet ik niks van maar je zou dus alle mogelijke roots in een array kunnen zetten, en anders is er denk ik niet echt een optie :(
 
Ozzie PHP

Ozzie PHP

14/04/2011 14:38:03
Quote Anchor link
Nee, ik denk dat het wel anders kan... door per niveau (root) de directories op te halen. Weet nog niet hoe, maar ik ga het proberen uit te vinden...
 
Gerben Jacobs

Gerben Jacobs

14/04/2011 15:38:44
Quote Anchor link
Ik ben ook met zoiets bezig.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$dispatch
= Dispatcher::getInstance($customer);

$user = $dispatch->get('User');
?>


Ik wil dus de class "User"

In mijn Dispatcher class heb ik dan ergens de volgende methode

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
    public static function get($class) {
        // Set up class url
        $basepath = $class.'.php';
        
        // Include base class
        include('core/'.$basepath);

        // Do we have custom functionality
        $custom_url = 'custom/'.self::$customer_slug.'/'.$basepath;
        if (file_exists($custom_url)) {
            include($custom_url);
            $classname = self::$customer_slug.'_'.$class;
            return new $classname;
        }
else {
            return new $class;
        }
    }

?>


De bestanden structuur ziet er dan ongeveer zo uit:
/core
-/User.php (class User)
/custom
-/sony
--/User.php (class sony_User extends User)

Dus iets minder diep dan dat jij wilt.

Wat ik nu dus kan, is kijken of er voor de klant 'sony' (is ook de customer_slug) een User.php bestand aanwezig is en dan die gebruiken. Deze extend ook de core User class, dus ik hoef alleen per klant aan te passen.. Als dat allemaal niet nodig is, gebruik ik gewoon core/User.php.

In de variable $user heb ik dus een sony_User of User class, en kan ik dus aanroepen wat ik wil, ongeacht wat hun functionaliteit is (soort van).
 
Ozzie PHP

Ozzie PHP

14/04/2011 15:41:38
Quote Anchor link
Dit is inderdaad iets anders dan hetgeen ik wil, maar toch bedankt :)
 
Pim -

Pim -

14/04/2011 22:19:08
Quote Anchor link
Je kan eens naar de finder van symfony kijken en deze misschien uitbreiden.
 
Ozzie PHP

Ozzie PHP

14/04/2011 22:22:50
Quote Anchor link
thanks... maar dit hoeft niet met classes... ik moet gewoon een stukje simpele code hebben die telkens 1 niveau hoger gaat en daar de directories afspeurt... ik gebruik het om vanuit de index.php eenmalig het framework op te sporen op een hoger niveau op de server.
 
Phpnuke r

phpnuke r

15/04/2011 09:14:38
Quote Anchor link
Ik denk dat er geen andere optie is dan onze stukjes code te gebruiken of dit stukje gewoon te cancelen.
 
Write Down

Write Down

15/04/2011 09:28:58
Quote Anchor link
Ik zou overigens wel niet telkens op zoek gaan. Je zou zoiets kunnen inbouwen in je installer, die dat dan opslaat als een constante. define('PATH', $script) Op die manier maak je weer een tikkeltje performance winst.
 
Ozzie PHP

Ozzie PHP

15/04/2011 09:39:45
Quote Anchor link
Ik had zelf bedacht om het pad van het framework op te slaan in een .ini bestandje. Dus de allereerste keer laten zoeken en dan wegschrijven in een ini bestand. En dan bij iedere pagina aanroep het ini bestandje even inlezen.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.