Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Webprogrammeren & scripting

[PHP] "file_exists"

Klaasje
14 antwoorden
  • Ik gebruik een Image Gallery in PHP. Nu heb ik daarvan twee versies namelijk één voor een resolutie 800*600 en één voor 1024*768. Dat werkt perfect op 1 ding na: de reacties op de foto's zijn voor beide resoluties verschillend. Ik wil juist dat de reacties niet gescheiden worden, maar dat de reacties voor beide resoluties hetzelfde zijn.
    Het gaat om de volgende code:
    [code:1:aa582b9444]
    $p=trim($_GET['p']);
    $ex = substr(strrchr($p,"."),0);
    $pixas = substr($p, 0, strlen($p) - strlen(strstr($p,$ex)));
    $filename = "".$pixas.".txt";
    if (!file_exists($filename) && file_exists($p)){//cheking if exists comments file
    touch($filename);
    chmod($filename,0666);
    }
    $byla=file($filename);
    $max = count($byla);[/code:1:aa582b9444]
    Ik heb dit veranderd in:
    [code:1:aa582b9444]
    $p=trim($_GET['p']);
    $ex = substr(strrchr($p,"."),0);
    $pixas = substr($p, 0, strlen($p) - strlen(strstr($p,$ex)));

    $folder ="http://localhost/Gallery/1024x768/";
    $filename2 = "".$pixas.".txt";
    $filename = "$folder$filename2";

    if (!file_exists($filename) && file_exists($p)){//cheking if exists comments file
    touch($filename);
    chmod($filename,0666);
    }
    $byla=file($filename);
    $max = count($byla);[/code:1:aa582b9444]

    Dit werkt echter niet, ik krijg de volgende foutmelding:[quote:aa582b9444]
    Warning: touch(): Unable to create file http://localhost/Gallery/1024x768/01_001.txt because No such file or directory in /srv/localhost/Gallery/1024x768/01_2.php on line 355

    Warning: chmod(): No such file or directory in /srv/localhost/Gallery/1024x768/01_2.php on line 356

    Warning: file(http://localhost/Gallery/1024x768/01_001.txt): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /srv/localhost/Gallery/1024x768/01_2.php on line 358

    Warning: rsort() expects parameter 1 to be array, boolean given in /srv/localhost/Gallery/1024x768/01_2.php on line 365
    [/quote:aa582b9444]
  • Inmiddels krijg ik alleen nog de volgende foutmelding:
    [quote:644cd7cc5f]
    Warning: touch(): Unable to create file http://localhost/Gallery/1024x768/01_008.txt because No such file or directory in /srv/localhost/www/www.domein.nl/Gallery/800x600/01_2.php on line 355

    Warning: chmod(): No such file or directory in /srv/localhost/www/www.domein.nl/Gallery/800x600/01_2.php on line 356[/quote:644cd7cc5f]
  • De fout zit 'm is het stukje [code:1:123dfff032]$folder = "http://localhost/Gallery/1024x768/"[/code:1:123dfff032]
    Het pad waar een bestand wordt gemaakt/gelezen wordt altijd bekeken vanaf de php executable zelf, niet vanaf de webbrowser, dus php heeft geen idee wat het met een pad als 'http://localhost/…' moet, omdat het gaat proberen de volgende map te openen: '/srv/localhost/http://locahlost/Gallery/….'.

    Wat je moet veranderen: je moet in de $folder variable het interne pad zetten naar de map waarin je de de foto wilt zetten. Ik denk dat dit zou moeten werken:[code:1:123dfff032]$folder = "/srv/localhost/www/www.insania.nl/Gallery/1024x768/"[/code:1:123dfff032]
    Je zou ook de realpath() functie kunnen gebruiken om het exacte pad naar een map uit te vissen.

    Groetjes,
    Vic
  • [quote:e817cf820a="Vic"]Je zou ook de realpath() functie kunnen gebruiken om het exacte pad naar een map uit te vissen.
    [/quote:e817cf820a]
    Bedankt Vic, nu krijg ik de foutmelding niet meer! :roll:
    Ik heb je raad opgevolgd en het zo gedaan:
    [quote:e817cf820a]
    $folder = realpath ("http://localhost/Gallery/1024x768/");
    $filename2 = "".$pixas.".txt";
    $filename = "$folder" . "$filename2";
    [/quote:e817cf820a]
    Alleen werkt het nu nog steeds niet… :-? Ik krijg weliswaar geen foutmelding meer, maar toch worden de reacties voor beide resoluties verschillend weergegeven. Het ligt, denk ik, niet aan bovenstaande code, maar aan de volgende code verder op de pagina:
    [quote:e817cf820a]
    // show comments
    for ($u=$startas; $u<$endaz; $u++){
    $infa = explode("|",$byla[$u]);
    $infa[3] = wordwrap( $infa[3], 95, "
    ", 1);
    $html.='
    <table class="table_border" width="300" border="0" cellpadding="0" cellspacing="0" align="center">
    <tr>
    <td align="left" class="comments_up" >'.$lang["name"].' : ';
    if ($infa[2]!==''){$html.= '<a href="mailto:'.$infa[2].'">'.$infa[1].'</a>';}
    else $html.= $infa[1];
    $html.='
    </td>
    </tr>';
    $html.='
    <tr>
    <td colspan="2">'.$infa[3].'<br><div align="right">'.$infa[5].'</div>';
    if ($infa[6]){
    $html.=' <div align="left">'.$lang["admin_name"].' :<br />'.$infa[6].'</div>';
    }

    $html.='
    </td>
    </tr>
    </table>';
    }//end for
    [/quote:e817cf820a]
    Alleen snap ik hier niets van :(
    Ik gebruik overigens deze picture gallery.
    Wie weet raad?
  • Hmm… ik had het stukje '$folder = realpath("http://www.mijnserver.nl");' eens uitgeprobeerd op mijn lokale Apache server, maar hierbij kreeg ik een vreemde, niet-kloppende directory.
    Ik denk daarom ook dat daarom het commentaar niet goed gelezen wordt.

    Je zou ook [code:1:eb30ea67e4]$folder = realpath(".");[/code:1:eb30ea67e4]kunnen gebruiken, dan bevat $folder het exacte pad naar de map waarin je script loopt.

    Groetjes,
    Vic
  • [quote:ff2152a0a6="Vic"]
    Je zou ook [code:1:ff2152a0a6]$folder = realpath(".");[/code:1:ff2152a0a6]kunnen gebruiken, dan bevat $folder het exacte pad naar de map waarin je script loopt.[/quote:ff2152a0a6]
    Bedankt voor je reactie, maar ik wil juist dat $folder het exacte pad naar een andere map dan de map waarin het script loopt bevat!
    Het script loopt namelijk in de map 800x600, maar ik wil dat $folder het exacte pad naar de map 1024x768 bevat. :roll:

    Ik hoop dat je hiermee iets kunt.

    Wederom alvast bedankt!
  • Misschien moet je werken met $_SERVER["DOCUMENT_ROOT"]…?

    - Bas
  • Als je eventjes post hoe de directory structuur in elkaar zit, maak ik wel even dat script je voor je :)

    Iets als
    [code:1:8ad5d706d4]
    [+] Mijn map
    |
    – Mijn submap
    |
    – Mijn submap2
    [/code:1:8ad5d706d4]
    zou prima zijn.

    Groetjes,
    Vic
  • Ok, alvast bedankt iig! :)
    Hier is 'ie:
    [code:1:c6cf3dfa7f]
    [+] www.domein.nl
    |
    [+] Gallery
    |
    [+] 1024x768 (naar deze map moet het script verwijzen)
    [+] 800x600 ( in deze map draait het script)
    [/code:1:c6cf3dfa7f]
    En hier in 'URL-taal':
    http://www.domein.nl/Gallery/1024x768/
    http://www.domein.nl/Gallery/800x600/script.php
  • Ik denk dat dit moet werken:
    [code:1:d59512fd52]$folder = realpath('./../1024x768');[/code:1:d59512fd52]

    Groetjes,
    vic
  • [quote:74ce4163a1="Vic"]Ik denk dat dit moet werken:
    [code:1:74ce4163a1]$folder = realpath('./../1024x768');[/code:1:74ce4163a1]
    [/quote:74ce4163a1]
    Bedankt voor je reactie, maar dat werkt ook niet. :(

    Andere suggesties?

    @ BasHamar: wat bedoel je met: $_SERVER["DOCUMENT_ROOT"]

    Thnx alvast allemaal!
  • Probeer dit anders eens:[code:1:bf09c0586e]$folder =$_SERVER["DOCUMENT_ROOT"]."/Gallery/1024x768/";
    $filename2 = "".$pixas.".txt";
    $filename = $folder.$filename2;[/code:1:bf09c0586e]Misschien dat je de eerste slash (voor "Gallery") moet verwijderen, maar dat is een kwestie van proberen.

    - Bas
  • [quote:ba21066875="BasHamar"]Probeer dit anders eens:[code:1:ba21066875]$folder =$_SERVER["DOCUMENT_ROOT"]."/Gallery/1024x768/";
    $filename2 = "".$pixas.".txt";
    $filename = $folder.$filename2;[/code:1:ba21066875]Misschien dat je de eerste slash (voor "Gallery") moet verwijderen, maar dat is een kwestie van proberen.

    - Bas[/quote:ba21066875]
    Bedankt voor je hulp.
    Het moest met een slash, want zonder kreeg ik een foutmelding. Het werkt echter ook niet met slash, ik krijg weliswaar geen foutmelding, maar het heeft geen resultaat. De reacties worden niet getoond. Er staat onder de afbeelding wel "Reacties: 1", maar als je dan naar de reacties toegaat, zie je geen reacties in beeld.
    Ik denk dat het dus aan het volgende gedeelte van het script ligt:
    [code:1:ba21066875]// show comments
    for ($u=$startas; $u<$endaz; $u++){
    $infa = explode("|",$byla[$u]);
    $infa[3] = wordwrap( $infa[3], 95, "
    ", 1);
    $html.='
    <table class="table_border" width="300" border="0" cellpadding="0" cellspacing="0" align="center">
    <tr>
    <td align="left" class="comments_up" >'.$lang["name"].' : ';
    if ($infa[2]!==''){$html.= '<a href="mailto:'.$infa[2].'">'.$infa[1].'</a>';}
    else $html.= $infa[1];
    $html.='
    </td>
    </tr>';
    $html.='
    <tr>
    <td colspan="2">'.$infa[3].'<br><div align="right">'.$infa[5].'</div>';
    if ($infa[6]){
    $html.=' <div align="left">'.$lang["admin_name"].' :<br />'.$infa[6].'</div>';
    }

    $html.='
    </td>
    </tr>
    </table>';
    }//end for
    [/code:1:ba21066875]
  • Zoek even op waar [i:b4ff0b4e62]$byla[/i:b4ff0b4e62] vandaan komt, daar lijken de reacties in te staan.

    - Bas

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.