foto uploaden maar map klopt niet

Status
Niet open voor verdere reacties.

De Mettes

Gebruiker
Lid geworden
29 mei 2007
Berichten
172
Dag iedereen

ik heb een script om foto's te uploaden. In het script kan je een map bij aanmaken en uit een drop down menu kiezen in welke map de foto moet komen of gewoon de map waar de .php's instaan.
Als je wil uploaden naar de map waar de .php's in staan is er geen probleem. Wil je nu in een andere map opslaan dan geeft hij de melding dat de foto is geupload maar staat deze niet in de map (nergens te vinden ook niet). De mappen worden wel juist aangemaakt.

Hier staat het online en dit is de code:
PHP:
<?php
error_reporting(E_ALL);
session_start();

$maxkb = 4194304; // maximale grootte van bestand (ook i.v.m. datalimiet)
$watermerkurl = "hover.png"; // watermerkafbeelding, moet wel een png zijn

?>

<html>
<head>
<script language="javascript">
function createmap(id)
{
    if(document.getElementById("weergeefcreate"+id).style.display=='none')
    {
        document.getElementById("weergeefcreate"+id).style.display = '';
        document.getElementById("verbergcreate"+id).style.display = 'none';
        document.getElementById("createetext"+id).style.display = 'none';
    }
    else
    {
        document.getElementById("weergeefcreate"+id).style.display = 'none';
        document.getElementById("verbergcreate"+id).style.display = '';
        document.getElementById("createetext"+id).style.display = '';
    }
}
</script>
</head>
<body>
<h3 align="center">Uploaden</h3>
<?php
if(isset($_POST['map']))
{
    if($_POST['map'] == 'this')
    {
        $path = './';
    }
    else
    {
        $path = $_POST['map'].'/'; // map waarna geupload moet worden met eindslash
    }
}
else
{
    $path = './';
}

if(isset($_POST['resize_breedte']))
{
    $user_breedte = $_POST['resize_breedte']; // breedte van de nieuwe image
}

//--- bekijk of het bestand kleiner of net zo groot als de maximaal opgegeven grootte is en of de foto wel geupload is en of extentie wel .jpg of .jpeg is!
if(isset($_POST['submit']) && $_FILES['userfile']['size'] <= $maxkb && 
   !file_exists($path . $_FILES['userfile']['name']) && 
   $_FILES['userfile']['size'] && 
   is_uploaded_file($_FILES['userfile']['tmp_name']) && 
   (strtolower(substr($_FILES['userfile']['name'], -3)) == "jpg" || strtolower(substr($_FILES['userfile']['name'], -4)) == "jpeg"))
    {
    
    //--- upload image naar $path
    move_uploaded_file($_FILES['userfile']['tmp_name'], $path . $_FILES['userfile']['name']);

    //--- transparante watermerk
    $watermerk = imagecreatefrompng($watermerkurl);
    $watermerk_width = imagesx($watermerk);
    $watermerk_height = imagesy($watermerk);
    imagecreatetruecolor($watermerk_width, $watermerk_height);

    //--- achterhaal de eigenschappen van de foto
    list($breedte, $hoogte, $image_type) = getimagesize($path . $_FILES['userfile']['name']);
    
    //--- bepaal de verhouding tussen hoogte en breete
    $image_ratio = $hoogte / $breedte;
    
    //--- bereken op basis van de raio de nieuwe hoogte
    if($image_ratio > 1){
        $rs_breedte = $user_breedte;
        $rs_hoogte = $user_breedte * $image_ratio;
    }
    else{
        $rs_hoogte = $user_breedte;
        $rs_breedte = $user_breedte / $image_ratio;
    }
    //--- maak resize image aan in het geheugen
    $resize = imagecreatetruecolor($rs_breedte, $rs_hoogte);
    //--- bron om te resizen
    $source = imagecreatefromjpeg($path . $_FILES['userfile']['name']);
    //--- foto resize
    imagecopyresized($resize, $source, 0, 0, 0, 0, $rs_breedte, $rs_hoogte, $breedte, $hoogte);
    // foto opslaan
    imagejpeg($resize, $path . $_FILES['userfile']['name']);
    
    $image = imagecreatefromjpeg($path . $_FILES['userfile']['name']);
    $size = getimagesize($path . $_FILES['userfile']['name']);

    if(!isset($_POST['watermerk']) || $_POST['watermerk'] != 'nee')
    {
    //--- defineer de coordinaten van het watermerk - dit voorbeeld is links onder
    /*
    bijv: geuploade plaatje: 180 x 130
    watermerk groote: 50 x 16

    berekening voor coordinaten 'x' as:
    180 (breedte geuploade foto) - 50 (breedte watermerk) - 5 (ruimte rechts) = 125 pixels vanaf links

    berekening voor 'y' as:
    130 (hoogte geuploade foto) - 16 (hoogte watermerk) - 5 (ruimte onder) = 109 pixels vanaf boven
    */

    //--- dit is voor rechts boven
    $xas = $size[0] - $watermerk_width - 5;
    $yas = 5;

    //--- overschrijf het 'geuploade bestand' en voeg watermerk toe
    imagecopymerge($image, $watermerk, $xas, $yas, 0, 0, $watermerk_width, $watermerk_height, 100);

    //--- upload image
    imagejpeg($image, $path . $_FILES['userfile']['name']); // max. kwaliteit

    imagedestroy($image);
    imagedestroy($watermerk);
    
    }
        
    $_SESSION['image'] = $path.$_FILES['userfile']['name'];
    
    echo '<meta http-equiv="refresh" content="2;url=?uploaded=ja">';
    echo 'Succesvol geupload, en ogenblik geduld a.u.b.';
}
elseif(isset($_GET['uploaded']) && isset($_SESSION['image']))
{
    echo 'De foto is geupload. Je kunt de foto bekijken door op de onderstaande link te klikken:<br />';
    echo '<a href="' . $_SESSION['image'] . '">' . $_SESSION['image'] . '</a><p>';
    echo '<img src="' . $_SESSION['image'] . '"><p>';
    echo '<a href="' . $_SERVER['PHP_SELF'] . '">upload nog een foto</a>';
}
else
{
    //--- errors
    if (isset($_POST['submit']))
    {
        if (file_exists($path . $_FILES['userfile']['name']) && $_FILES['userfile']['name'])
        {
            echo '<b>Error! Bestand bestaat al, hernoem de foto en probeer het opnieuw.</b><br><br>';
        }
        elseif ($_FILES['userfile']['size'] > $maxkb)
        {
            echo '<b>Error! Bestand is groter dan " . $maxkb . "bytes. Verklein de foto en probeer het opnieuw</b><br><br>';
        }
        elseif (strtolower(substr($_FILES['userfile']['name'], -3)) != "jpg" && strtolower(substr($_FILES['userfile']['name'], -4)) != "jpeg")
        {
            echo '<b>Error! De foto heeft een verkeerde bestandsnaam. Er mogen alleen bestanden geupload worden met als .jpg of .jpeg als extensie.</b><br><br>';
        }
        else
        {
            echo '<b>Error! De foto is niet goed geupload of er is helemaal geen foto geupload. Probeer het opnieuw.</b><br><br>';
        }
    }
    else
    {
        if(isset($_POST['creatdir'])){
            if(!empty($_POST['mapname']))
            {
                mkdir("./".$_POST['mapname'], 0755);
                echo 'de map '.$_POST['mapname'].' is aangemaakt<br><br>';
            }
            else
            {
                echo '<b>de opgegeven bestandsnaam is leeg</b><br><br>';
            }
        }
        else{
            echo '<div id="createetext1" style="display:none; position:absolute; width: 350px; background-color:#999999; z-index: 3;">
                    <h4 align="center">Maak een nieuwe map aan</h4>
                    <form method="post" action="' . $_SERVER['PHP_SELF'] . '">
                        Nieuwe map naam:<input type="text" name="mapname" /><br /><br>
                        <input type="submit" name="creatdir" value="Maak map aan" />
                        <div id="verbergcreate1" style="display:none;">
                        <input name="createe_text" type="button" value="cancel" onclick="createmap(1)" />
                           </div></div>

                       </form>
                </div>';
        }
        if(isset($_POST['userfile']))
        {
            $file = $_POST['userfile'];
        }
        else
        {
            $file = " ";
        }
        
        echo '<form method="post" action="' . $_SERVER['PHP_SELF'] . '" enctype="multipart/form-data">';

        $handle = opendir($path);
        
        echo 'Selecteer een doelmap: <select name="map" style="z-index: 1;">';
        echo '<option value="this">Deze map</option>';
        
        while (false!==($file = readdir($handle)))
        {
            if ($file != "." && $file != "..")
            {
                
                if (is_dir($file))
                {
                    echo '<option value="'.$file.'">'.$file.'</option>';
                }
            }
        }
        
        echo '</select>
              <div id="weergeefcreate1" onclick="createmap(1)" style="cursor:pointer; float: left;">
                  <i>Of klik hier en maak een nieuwe map aan</i>
              </div>
              <br>
              <br>
              <br>';

        
        closedir($handle);
        
        //--- formulier met enctype multipart/form-data ivm de file upload
        echo '<input type="hidden" name="MAX_FILE_SIZE" value="' . $maxkb . '" />
                Nieuwe breedte: <input name="resize_breedte" type="text" value="500" size="4" maxlength="4">px<br /><br>
                Bestand: <input type="file" name="userfile" value="' . $file . '" /><br /><br>
                <input type="checkbox" name="watermerk" value="nee" />G&egrave;&egrave;n watermerk toevoegen<br /><br />
                <input type="submit" name="submit" value="uploaden" onclick="';
        echo "document.getElementById('bezig').style.visibility='visible'";
        echo '" />
            </form><br><br><div id="bezig" style="visibility: hidden;">bezig met uploaden<img src="uploading.gif"></div>';
    }
}
?> 
</body>
</html>

kan iemand mij helpen?
 
Hey,

Heb je gecontroleerd of er geschreven kan worden in die mappen die aangemaakt zijn?
Je moet namelijk in de map rechten hebben, anders kan er niks geschreven worden.

Als je FlashFXP hebt, dan kun je de rechten veranderen van mappen met CHMOD. veranderd dit naar 777. Dus iedereen alle rechten...
Met een ander programma weet ik het niet.

Dus dit controleren, want zonder dit, lukt het nooit..

Succes,
Mathijs
 
Ahja ik heb mijn hoofdmap geCHMOD met 777 daarom kan ik daar wel in uploaden.
Maar als ik via het script een map bij aanmaak dan worden die permissies niet op 777 gezet.

Weet iemand ook hoe ik dit script kan aanpassen dat als er een map word aangemaakt de permissies automatisch op 777 gezet worden?

Alvast bedankt GhastlyMIB ik kan toch al verder.

EDIT: Ik heb in mijn code aangepast bij de mkdir wat normaal zou moeten kloppen nu maar ik heb niet de juiste permissies.
mkdir("./".$_POST['mapname'], 0777);
 
Laatst bewerkt:
Hey,

als je de hoofdmap insteld op 777, dan moet je ook aangeven dat de onderliggende mappen en bestanden 777 moeten worden. Als je dan een nieuwe aanmaakt met jouw script, dan moet je bestanden kunnen plaatsen.

Ik heb heb uitgebrobeerd met iets van mijzelf, en daar werkt het ook zo.
Ik maak een nieuwe map, en ik kan in die map al meteen schrijven.

Dus het zou zo moeten gaan.

Wat het veiligst is, is om een nieuwe map te maken in jouw hoofddirectory. Bijvoorbeeld genaamd: photos. Dan geef je die map de 777 rechten INCLUSIEF onderligende mappen en bestanden. Dan laat je daar al de albums en foto's in plaatsen.

Succes,
Mathijs
 
Laatst bewerkt:
Ik maak mappen aan in de map "upload". De map "upload" is ingesteld op 777 maar als ik een map aanmaak met mijn script (die normaal 777 moete zijn) in de map "upload" dan zijn ze toch maar 755.

Ik heb de permissies van de map "upload" in dreamweaver veranderd naar 777 en er sta nergens een functie voor de submappen ofzo.


EDIT: heb met FlashFTP mijn map gechmod 777 en op gelet dat het voor submappen ook aangevinkt was. Als ik dan terug kijk is het vinkske weg en als ik dan test met mijn script om een map aan te maken is dit weer slecht 557. Kan dit door mijn server komen?
 
Laatst bewerkt:
Je hoeft niet te blijven veranderen op 777
Als ik een bestand upload staat die ook NIET op 777 maar 644 :confused:.
Maar omdat ik m het geupload met PHP, dan heeft die daar wel de rechten over.
En de mappen die ik aangemaakt heb, heeft 755 en die kan ik ook verwijderen met PHP...

Ik hoop dat je er iets mee kunt.

Succes,
Mathijs
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan