[PHP] file_exists

Pagina: 1
Acties:
  • 120 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Neok_
  • Registratie: Februari 2005
  • Niet online
Met mijn karige php-kennis heb ik toch wat in elkaar geprobeerd te flansen, maar het wou nou niet echt lukken terwijl ik de fout ECHT niet zie :(

Het volgende heb ik geschreven:

[code=php]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>
PHP:
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
 Thumbnail+link generator</title>
    
    </head>
    
    <body>
        
        <?php
        
            $j=0;
            $foto_klein_dir = '/koen/rommel/test/fotos/';
            $foto_groot_dir = '/koen/rommel/test/fotos/';
            
            //Map kent maximaal 10 foto's
            for ($i=0; $i<=10; $i++)
            {   
                
                //Generen bestandsnaam tumbnail
                if ($i<10)
                {
                    $foto_klein = $foto_klein_dir.'DSC_000'.$i.'%20(Custom).jpg';
                }
                
                else if (i<100)
                {
                    $foto_klein = $foto_klein_dir.'DSC_00'.$i.'%20(Custom).jpg';
                }
                
                else
                {
                    $foto_klein = $foto_klein_dir.'DSC_0'.$i.'%20(Custom).jpg';
                }
                
                //Controleren op bestaan foto
                $foto = 'http://www.ltw-benelux.com'.$foto_klein;
                if (file_exists($foto))
                {
                    //Bestand bestaat...
                    //Generen bestandsnaam groot
                    if ($i<10)
                    {
                        $foto_groot = $foto_klein_dir.'DSC_000'.$i.'%20(Medium).jpg';
                    }
                    
                    else if (i<100)
                    {
                        $foto_groot = $foto_klein_dir.'DSC_00'.$i.'%20(Medium).jpg';
                    }
                    
                    else
                    {
                        $foto_groot = $foto_klein_dir.'DSC_0'.$i.'%20(Medium).jpg';
                    }
                    
                    //Plaatsen foto
                    print (' <a href="' . $foto_groot . '"> ');
                    print (' <img src="' .$foto_klein. '" ALT="'.$foto_klein.'" ALIGN=center></a> ');
                    
                    
                    //3 Foto's per regel                
                    $j++;
                    
                    if ($j==3)
                    {
                        $j=0;
                        print ('<br><br>');
                        print ("\n");
                    }
                    
                    print ("\n");   
                }
                
                //Bestand bestaat niet...
                //Genereren foutmelding van niet bestaande URL:
                else
                {
                    print ( 'Het volgende bestand bestaat niet: ');
                    print ( '<a href="'.$foto.'">'.$foto.'</a><br>');
                    print ("\n");
                }
                
            }
            
        ?>
    
    
    
    </body>
</html>

De bedoeling was als volgt: ik had een map met daarin allemaal foto's (vandaar DSC_xxxx) en deze vervolgens allemaal klein (DSC_xxxx (Custom).jpg) en middelgroot (DSC_xxxx (Medium).jpg) geresized. Met een paar simpele regels php genereer ik telkens een URL tot een zelf gedefinieerd maximum.
Vervolgens moet hij gaan kijken ofdat de gegenereerde URL ook bestaat, aangezien het nog wel eens voorkomt dat geschoten foto's tussendoor gewist worden. Als deze bestaat maakt hij vervolgens een tumbnail van de foto met een link naar een grotere versie. Hij plaatst vervolgens 3 thumbnails per regel.
Bestaat de URL niet, dan geeft hij hier melding van (in de uiteindelijke versie niet, puur voor debugging).

MAAR: het werkt dus niet, hij geeft aan dat de URL niet bestaat, maar als je deze vervolgens invoert blijkt hij wel te bestaan.
Verduidelijking, in deze map een voorbeeldje gemaakt: klik. 'pic.php' Bevat bovenstaand script, en de bijbehorende fotos staan in de map /fotos/.
Als je de pagina opent dan zie je dus dat hij alleen maar foutmeldingen genereert (waarvan sommige overigens wel terecht), maar klik je op de link die hij gechecked zou moeten hebben dan zie je dat het wel gewoon werkt.

Wie weet....?

//edit:
Foto 1, 2, 4, 6, 9 en 10 zou dus wel moeten werken.

Acties:
  • 0 Henk 'm!

  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 15-06 19:53
Waarom gebruik je file_exists in combinatie met een URL? Je kunt ook gewoon via het filesystem gaan controleren, dan hoeft je script niet via het internet weer terug naar zichzelf om te kijken of een foto bestaat.

Acties:
  • 0 Henk 'm!

  • Psychokiller
  • Registratie: Oktober 2001
  • Niet online
Volgens mij werkt File_exists alleen lokaal danwel via netwerk etc, niet via http.
Dus je moet of paden gebruiken relatief ten opzichte van de map waar je zit zoals op regel 15/16, of je moet eens kijken naar de kleine functie die in het 1e commentaar op de php-pagina staat die kijkt of een remote file bestaat.
Ik denk dat dat het wel oplost :)

Acties:
  • 0 Henk 'm!

  • mrFoce
  • Registratie: Augustus 2004
  • Laatst online: 05-06 17:59
Psychokiller schreef op zondag 17 september 2006 @ 20:55:
Volgens mij werkt File_exists alleen lokaal danwel via netwerk etc, niet via http.
Dus je moet of paden gebruiken relatief ten opzichte van de map waar je zit zoals op regel 15/16, of je moet eens kijken naar de kleine functie die in het 1e commentaar op de php-pagina staat die kijkt of een remote file bestaat.
Ik denk dat dat het wel oplost :)
Wat hij zegt!

of
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function url_header($url) {
        $url = preg_replace('#^http:#i', '', $url);
        if (preg_match('#^//#', $url)){
                list(,,$domain, $file) = explode('/', $url, 4);
                $file = "/$file";
        } else {
                $file = $url;
                if (! preg_match('#^/#', $file)) $file = "/$file";
                $domain = $_SERVER[HTTP_HOST];
        }
        $fid = fsockopen($domain, 80);
        if (! $fid) return "Host not responding";
        fputs($fid, "HEAD $file HTTP/1.0\r\nHost: $domain\r\n\r\n");
        $head = fread($fid, 4096);
        fclose($fid);
        echo "<br>\n<pre>\n$head<pre>";
        return $head;
}

function url_exists($url) {
        return preg_match('#^HTTP/.*\s+200\sOK\s#i', url_header($url));
}

Acties:
  • 0 Henk 'm!

  • Amorphis
  • Registratie: Maart 2000
  • Laatst online: 06-06 10:10
Het klopt inderdaad dat file_exists niet werkt over netwerk. Het is wel heel eenvoudig op te lossen met de functie getimagesize(). (deze returned false als de image niet gevonden wordt). Dus file_exists vervangen door getimagesize en je bent denk ik al een stapje verder. (als de check echt over http moet)

[ Voor 6% gewijzigd door Amorphis op 17-09-2006 21:09 ]


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Amorphis schreef op zondag 17 september 2006 @ 21:07:
Het klopt inderdaad dat file_exists niet werkt over netwerk.
Met PHP5 werkt dat wel.

Acties:
  • 0 Henk 'm!

  • TheLunatic
  • Registratie: April 2001
  • Laatst online: 25-02 08:57

TheLunatic

Ouwe boxen.

Al werkt het, dan nog wil je het niet als het script op dezelfde server (of locatie) staat als de foto's... als ze op een fysiek andere locatie staan dan zal het wel zo moeten natuurlijk.

Mother, will they like this song?


Acties:
  • 0 Henk 'm!

  • Neok_
  • Registratie: Februari 2005
  • Niet online
[code=php]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>
PHP:
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
 Thumbnail+link generator</title>
    
    </head>
    
    <body>
        
        <?php
        
            $j=0;
            $foto_klein_dir = '/koen/rommel/test/fotos/';
            $foto_groot_dir = '/koen/rommel/test/fotos/';
            
            //Map kent maximaal 10 foto's
            for ($i=0; $i<=10; $i++)
            {   
                
                //Generen bestandsnaam tumbnail
                if ($i<10)
                {
                    $foto_klein = $foto_klein_dir.'DSC_000'.$i.'%20(Custom).jpg';
                }
                
                else if (i<100)
                {
                    $foto_klein = $foto_klein_dir.'DSC_00'.$i.'%20(Custom).jpg';
                }
                
                else
                {
                    $foto_klein = $foto_klein_dir.'DSC_0'.$i.'%20(Custom).jpg';
                }
                
                //Controleren op bestaan foto dmv een afmetingen-check
                $foto = 'http://www.ltw-benelux.com'.$foto_klein;
                
                $check = getimagesize($foto);
                
                if ($check != false)
                {
                    //Bestand bestaat want afmetingen kunnen worden opgehaald...
                    //Generen bestandsnaam groot
                    if ($i<10)
                    {
                        $foto_groot = $foto_klein_dir.'DSC_000'.$i.'%20(Medium).jpg';
                    }
                    
                    else if (i<100)
                    {
                        $foto_groot = $foto_klein_dir.'DSC_00'.$i.'%20(Medium).jpg';
                    }
                    
                    else
                    {
                        $foto_groot = $foto_klein_dir.'DSC_0'.$i.'%20(Medium).jpg';
                    }
                    
                    //Plaatsen foto
                    print (' <a href="' . $foto_groot . '"> ');
                    print (' <img src="' .$foto_klein. '" ALT="'.$foto_klein.'" ALIGN=center></a> ');
                    
                    
                    //3 Foto's per regel                
                    $j++;
                    
                    if ($j==3)
                    {
                        $j=0;
                        print ('<br><br>');
                        print ("\n");
                    }
                    
                    print ("\n");   
                }
                
                //Bestand bestaat niet...
                //Genereren foutmelding van niet bestaande URL:
                else
                {
                    //foto bestaat niet
                }
                
            }
            
        ?>
    
    
    
    </body>
</html>

Met deze code werkt het idd zonder als te grote veranderen. Ander tips van filesysteem check ik nog wel een andere keer, maar aangezien ik PHP maar sporadisch gebruik en ik geen fantastische code hoef ben ik hier blij mee.

Bedankt voor alle input iig, het (test)resultaat valt nu dan ook hier te bemachtigen:
http://www.ltw-benelux.com/koen/rommel/test/pics.php
:)

offtopic:
Foto orginelen in de map /original voor de liefhebbers.

Acties:
  • 0 Henk 'm!

  • killercow
  • Registratie: Maart 2000
  • Laatst online: 09:27

killercow

eth0

Toch jammer,

Met geimagesize over http zal je php script alle bestanden over het internet (ookal is het de zelfde server) downloaden en bekijken, wat toch echt wel trager is dan via het lokale filesystem.

PHP:
1
2
3
4
//Controleren op bestaan foto dmv een afmetingen-check
$foto = 'http://www.ltw-benelux.com'.$foto_klein;
                
$check = getimagesize($foto);


vervangen voor:
PHP:
1
2
//Controleren op bestaan foto dmv een afmetingen-check
$check = getimagesize($foto_klein);


Zou het moeten doen,

er van uit gaande dat je dit bestand in de root hebt staan.

openkat.nl al gezien?


Acties:
  • 0 Henk 'm!

  • Daspeed
  • Registratie: Maart 2001
  • Laatst online: 16:39
je bent bij de else if's de $ bij de i vergeten

Acties:
  • 0 Henk 'm!

  • mcdronkz
  • Registratie: Oktober 2003
  • Laatst online: 16-04 12:44
DrClearbottom schreef op maandag 18 september 2006 @ 12:44:
je bent bij de else if's de $ bij de i vergeten
Klopt, maar dat merkt 'ie wel als 'ie over de 100 foto's heeft :D.
Pagina: 1