Upload script

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Bram Boos

Bram Boos

26/06/2010 16:44:39
Quote Anchor link
Ik ben momenteel bezig met een site voor een klant van mij.
Als ik een afbeelding wil uploaden krijg ik de volgende foutmeldingen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
Warning: copy() [function.copy]: SAFE MODE Restriction in effect. The script whose uid is 702 is not allowed to access /home/markt2000/domains/markt2000.nl/public_html/files/zoekertjes_groot/16 owned by uid 101 in /home/markt2000/domains/markt2000.nl/public_html/controllers/toevoegen.php on line 137

Warning: copy(files/zoekertjes_groot/16/brampaint.jpg) [function.copy]: failed to open stream: No such file or directory in /home/markt2000/domains/markt2000.nl/public_html/controllers/toevoegen.php on line 137

Warning: chmod() [function.chmod]: Unable to access files/zoekertjes_groot/16/brampaint.jpg in /home/markt2000/domains/markt2000.nl/public_html/controllers/toevoegen.php on line 138

Warning: chmod() [function.chmod]: SAFE MODE Restriction in effect. The script whose uid is 702 is not allowed to access /home/markt2000/domains/markt2000.nl/public_html/files/zoekertjes_groot/16 owned by uid 101 in /home/markt2000/domains/markt2000.nl/public_html/controllers/toevoegen.php on line 138

Warning: chmod() [function.chmod]: stat failed for files/zoekertjes_groot/16/brampaint.jpg in /home/markt2000/domains/markt2000.nl/public_html/controllers/toevoegen.php on line 138
Source image does not exist!

Ik heb zelf al een heleboel foutmeldingen kunnen verhelpen.
Waarschijnlijk zit het probleem zich in het chmodden van de afbeeldingenen.
Voor elk nieuwe advertentie maakt het script een map aan waar de afbeeldingen weer in komen. Die map welke het script aanmaakt wordt niet 777 ge-chmod. (denk ik)

Dit is het script:
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
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
<?php
Class Controller_toevoegen Extends Controller_Base {
    function
index() {
         $this->r['tpl']->define (array ('index.tpl', 'zoekertjes/toevoegen.tpl', 'gebruikers/niet_ingelogd.tpl'));

         if($this->r['client']->ingelogd == 1) {
            $sCategorieen = $this->r['sql']->query ("SELECT * FROM ##categorieen ORDER BY naam ASC");
            if($this->r['sql']->rows ($sCategorieen)) {
                while ($fCategorieen = $this->r['sql']->fetch ($sCategorieen)) {
                    $this->r['tpl']->assign ("Categorieen_R", "sPid", $fCategorieen['pid']);
                    $this->r['tpl']->assign ("Categorieen_R", "sNaam", $this->r['functions']->strip ($fCategorieen['naam']));
                    $this->r['tpl']->Parse ("Toevoegen", "Categorieen_R");
                }
            }

            $this->r['tpl']->Parse ("index", "sToevoegen");
            $this->r['tpl']->Parse ("Toevoegen");
        }
    
        else $this->r['tpl']->Parse ("Niet_ingelogd");
    }
    
    function
afronden () {
         $this->r['tpl']->define (array ('index.tpl', 'ajax/toevoegen_stap3.tpl'));

         if($this->r['client']->ingelogd == 1) {
            if(isset ($_POST['submit']) || $_SERVER['REQUEST_METHOD'] == 'post') {
            
                $sFlood = $this->r['sql']->query ("SELECT * FROM ##flood WHERE pagina = 'Toevoegen' AND ip = '".$this->r['functions']->haal_ip()."'");
                $sPro = $this->r['sql']->query ("SELECT pid FROM ##zoekertjes WHERE titel = '".mysql_real_escape_string ($_POST['titel'])."'");
                $error = array ();            
                foreach ($_FILES AS $key => $content) {
                    if(isset ($_FILES [$key]['name']) && !empty ($_FILES[$key]['name'])) {
                        if(filesize ($_FILES[$key]['tmp_name']) < $this->r['cfg']->max) {
                            $sExtensie = end(explode (".", $_FILES[$key]['name']));
                            $sGrootte = filesize ($_FILES[$key]['tmp_name']);

                            if(in_array ($sExtensie, $this->r['cfg']->extensies)) $succes = 1;
                            else $error ['Fplaatje'.$key] = 'Afbeelding '.substr ($key, -1).' heeft een ongeldige extensie';
                        }

                        else $error ['Fplaatje'.$key] = 'Afbeelding '.substr ($key, -1).' is te groot.';
                    }
                }

                
                if($this->r['sql']->rows ($sFlood))
                    $error['Ftitel'] = 'U heeft zojuist al een advertentie geplaatst, hier moet minstens een minuut tussen zitten';
                    
                if(!isset ($_POST['titel']) || empty ($_POST['titel']) || $this->r['sql']->rows ($sPro))
                    $error['Ftitel'] = 'Deze titel is te klein, of er is al een advertentie met deze titel, verander deze.';
                if(!isset ($_POST['plaats']) || empty ($_POST['plaats']) || strlen ($_POST['plaats']) > 100)
                    $error['Ftitel'] = 'Deze plaatsnaam is te klein of te groot.';
                if(!isset ($_POST['tags']) || empty ($_POST['tags']) || strlen ($_POST['tags']) > 50)
                    $error['Ftitel'] = 'Deze tags zijn te klein of te groot.';
                if(!isset ($_POST['omschrijving']) || empty ($_POST['omschrijving']))
                    $error['Fomschrijving'] = 'Deze omschrijving is te klein.';
                if(!isset ($_POST['anders']) || $_POST['anders'] == 'Kies een andere mogelijkheid') {
                    ## Prijs controleren
                    if(!isset ($_POST['prijs']) || empty ($_POST['prijs']))
                        $error['Fprijs'] = 'Deze prijs is ongeldig, kies prijs of een alternatief';
                }

                if(!isset ($_POST['veiling']) || ($_POST['veiling'] != 'Ja' && $_POST['veiling'] != 'Nee') )
                    $error['Fveiling'] = 'Kies veiling ja/nee';
                if(isset ($_POST['veiling']) && $_POST['veiling'] == 'Ja' && !ctype_digit ($_POST['lengte']))
                    $error['Flengte'] = 'De lengte van de veiling is ongeldig';
                if(isset ($_POST['veiling']) && $_POST['veiling'] == 'Ja' && (!empty ($_POST['anders']) && $_POST['anders'] == 'Kies een andere mogelijkheid') && empty ($_POST['buynow']))
                    $error['Flengte'] = 'De buynow van de veiling is ongeldig';
                    
                if(count ($error) > 0) {
                    ## Stap 1 weer weergeven
                    foreach ($_POST AS $key => $content) $this->r['tpl']->assign ("Toevoegen", "V".$key, $content);
                    
                    $this->r['tpl']->assign ("Toevoegen", "sCategorie", $this->r['functions']->strip ($_POST['categorie']));
                    $this->r['tpl']->assign ("Toevoegen", "sSubcategorie", $this->r['functions']->strip ($_POST['subcategorie']));
                    $this->r['tpl']->assign ("Toevoegen", "sSubsubcategorie", $this->r['functions']->strip (@$_POST['subsubcategorie']));
                    $this->r['tpl']->assign ("Toevoegen", $this->r['functions']->strip (@$_POST['lengte']), 'selected="selected"');
                    $this->r['tpl']->assign ("Toevoegen", $this->r['functions']->strip (@$_POST['veiling']), 'selected="selected"');
                    $this->r['tpl']->assign ("Toevoegen", $this->r['functions']->strip (@$_POST['anders']), 'selected="selected"');
                    
                    foreach ($_POST AS $key => $content) $this->r['tpl']->assign ("Toevoegen", $key, $content);
                    
                                          foreach ($error AS $key => $value)
                                          {

                                                $this->r['tpl']->assign ("Toevoegen", $key, '<font color="red">*</font>');
                                                $this->r['tpl']->assign ("sError_R", "sFout", $value);
                                                $this->r['tpl']->Parse ("sError", "sError_R");
                                          }

                                          $this->r['tpl']->Parse ("Toevoegen", "sError");
                    $this->r['tpl']->Parse ("Toevoegen");
                }

                else {
                    ## Flood
                    $this->r['sql']->query ("INSERT INTO ##flood (pagina, datum, ip) VALUES ('Toevoegen', '".time()."', '".$this->r['functions']->haal_ip ()."')");
                    
                    ## Advertentie plaatsen
                    $this->r['sql']->query ("INSERT INTO
                        ##zoekertjes (
                            titel,
                            uid,
                            plaats,
                            tags,
                            omschrijving,
                            prijs,
                            anders,
                            datum,
                            subcategorie,
                            subsubcategorie,
                            veiling,
                            veiling_lengte,
                            buynow) VALUES (
                            '"
.mysql_real_escape_string ($_POST['titel'])."',
                            '"
.mysql_real_escape_string ($this->r['user']['pid'])."',
                            '"
.mysql_real_escape_string ($_POST['plaats'])."',
                            '"
.mysql_real_escape_string ($_POST['tags'])."',
                            '"
.mysql_real_escape_string ($_POST['omschrijving'])."',
                            '"
.mysql_real_escape_string ($_POST['prijs'])."',
                            '"
.(!empty ($_POST['anders']) && $_POST['anders'] != 'Kies een andere mogelijkheid' ? mysql_real_escape_string ($_POST['anders']) : '')."',
                            '"
.time ()."',
                            '"
.mysql_real_escape_string ($_POST['subcategorie'])."',
                            '"
.mysql_real_escape_string (@$_POST['subsubcategorie'])."',
                            '"
.mysql_real_escape_string ($_POST['veiling'])."',
                            '"
.mysql_real_escape_string ($_POST['lengte'])."',
                            '"
.mysql_real_escape_string ($_POST['buynow'])."')");
                            
                    ## Uploaden
                    $sPid = $this->r['sql']->last_id ();
                    $sAfbeeldingen = array ();
              
                    if(isset ($_FILES)) {
                        foreach ($_FILES AS $key => $content) {
                            if(isset ($_FILES [$key]['name']) && !empty ($_FILES[$key]['name'])) {
                                if(filesize ($_FILES[$key]['tmp_name']) < $this->r['cfg']->max) {
                                    $sExtensie = end(explode (".", $_FILES[$key]['name']));
                                    $sGrootte = filesize ($_FILES[$key]['tmp_name']);

                                    if(in_array ($sExtensie, $this->r['cfg']->extensies)) {
                                            if(!is_dir ('files/zoekertjes/'.$sPid)) mkdir ('files/zoekertjes/'.$sPid);
                                            if(!is_dir ('files/zoekertjes_groot/'.$sPid)) mkdir ('files/zoekertjes_groot/'.$sPid);

                                            copy($_FILES[$key]['tmp_name'], 'files/zoekertjes_groot/'.$sPid.'/'.$_FILES[$key]['name']);
                                            chmod('files/zoekertjes_groot/'.$sPid.'/'.$_FILES[$key]['name'], 0777 ) ;

                                                                require_once ('classes/image.php');
                                                                /* THUMBNAIL MODE */

                                                                // save to file (true) or output to browser (false)

                                                                $save_to_file = true;

                                                                // Quality for JPEG and PNG.
                                                                // 0 (worst quality, smaller file) to 100 (best quality, bigger file)
                                                                // Note: PNG quality is only supported starting PHP 5.1.2

                                                                $image_quality = 100;

                                                                // resulting image type (1 = GIF, 2 = JPG, 3 = PNG)
                                                                // enter code of the image type if you want override it
                                                                // or set it to -1 to determine automatically

                                                                $image_type = -1;

                                                                // maximum thumb side size
                                                                $max_x = 75;
                                                                $max_y = 75;

                                                                // cut image before resizing. Set to 0 to skip this.
                                                                $cut_x = 0;
                                                                $cut_y = 0;

                                                                // Folder where source images are stored (thumbnails will be generated from these images).
                                                                // MUST end with slash.

                                                                $images_folder = 'files/zoekertjes_groot/'.$sPid.'/';

                                                                // Folder to save thumbnails, full path from the root folder, MUST end with slash.
                                                                // Only needed if you save generated thumbnails on the server.
                                                                // Sample for windows:     c:/wwwroot/thumbs/
                                                                // Sample for unix/linux:  /home/site.com/htdocs/thumbs/

                                                                $thumbs_folder = 'files/zoekertjes/'.$sPid.'/';


                                                                ///////////////////////////////////////////////////
                                                                /////////////// DO NOT EDIT BELOW
                                                                ///////////////////////////////////////////////////


                                                                $to_name = '';
                                                                $from_name = $_FILES[$key]['name'];
                                                                $to_name = $_FILES[$key]['name'];


                                                                if (!file_exists($images_folder)) die('Images folder does not exist (update $images_folder in the script)');
                                                                if ($save_to_file && !file_exists($thumbs_folder)) die('Thumbnails folder does not exist (update $thumbs_folder in the script)');

                                                                // Allocate all necessary memory for the image.
                                                                // Special thanks to Alecos for providing the code.

                                                                ini_set('memory_limit', '-1');

                                                                // include image processing code
                                                                //include('include/image.class.php');


                                                                $img = new Zubrag_image;

                                                                // initialize
                                                                $img->max_x        = $max_x;
                                                                $img->max_y        = $max_y;
                                                                $img->cut_x        = $cut_x;
                                                                $img->cut_y        = $cut_y;
                                                                $img->quality      = $image_quality;
                                                                $img->save_to_file = $save_to_file;
                                                                $img->image_type   = $image_type;

                                                                // generate thumbnail
                                                                $img->GenerateThumbFile($images_folder . $from_name, $thumbs_folder . $to_name);
                                                                /* END THUMBNAIL MODE */
                                                                
                                                                $sAfbeeldingen [] = $_FILES[$key]['name'];
                                    }
                                }
                            }
                        }
                    }

                    $this->r['sql']->query ("UPDATE ##zoekertjes SET afbeeldingen = '".implode (", ", $sAfbeeldingen)."' WHERE pid = '".$sPid."'");
                    $this->r['functions']->redirect ('Succesvol', 'Deze advertentie is succesvol geplaatst.', $this->r['functions']->strip (str_replace (" ", "-", $_POST['titel'])).'.html', 3);
                }
            }

            else $this->r['functions']->redirect ('Fout', 'Er ging iets fout', '', 3);
        }

        else $this->r['functions']->redirect ('Fout', 'Je bent niet ingelogd.', 'inloggen.html', 3);
    }
}

?>
 
PHP hulp

PHP hulp

22/12/2024 04:23:01
 
Noppes Homeland

Noppes Homeland

26/06/2010 17:10:08
Quote Anchor link
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<?php
/*
    hier vertrouw je dus meer op $_POST['submit'] want  
    
    $_SERVER['REQUEST_METHOD'] == 'post'  zal altijd false opleveren
*/
             
if(isset ($_POST['submit']) || $_SERVER['REQUEST_METHOD'] == 'post') {
}
>            

[
code]<?
/*
    en hier ga je er maar vanuit dat $_FILES bestaat
    end dat er redelijkerwijs $_FILES[$key]['error'] == 0 is
*/

                
                foreach ($_FILES AS $key => $content) {
                    if(isset ($_FILES [$key]['name']) && !empty ($_FILES[$key]['name'])) {
?>


<?php
/*
   en hier een 1 van de vele misstanden van de empty
  
   empty() is een zinloze functie en dien je niet te gebruik
   http://wiki.phpfreakz.nl/Empty  
  
*/
                      
                if(!isset ($_POST['titel']) || empty ($_POST['titel']) || $this->r['sql']->rows ($sPro))
?>
  

<?php
/*
    bij upload gebruik je per definitie: move_uploaded_file en niet copy!!

    een chmod 777 op een image is veels te veel van het goede en uiteraard gebruik je ook niet de
    $_FILES[$key]['name'] maar maak je je eigen filenaam. Op deze manier kan het heel eenvoudig zijn
    om info te vergaren welke eigenlijk achter gesloten deuren behoort te blijven
    
    zorg ervoor dat de target directory de juiste rechten heeft
    
*/

copy($_FILES[$key]['tmp_name'], 'files/zoekertjes_groot/'.$sPid.'/'.$_FILES[$key]['name']);
chmod('files/zoekertjes_groot/'.$sPid.'/'.$_FILES[$key]['name'], 0777 ) ;
    
?>


En zo ziet ik ook op plekken waar onnodige variabelen worden aangemaakt (?)
 
Bram Boos

Bram Boos

26/06/2010 17:30:23
Quote Anchor link
Oftewel: Brak gescript (en dit is nog maar 1 deeltje van de 40).
Alle folders staan ge-chmod op 777, wat gaat er dan mis?
 
Noppes Homeland

Noppes Homeland

26/06/2010 17:34:03
Quote Anchor link
`Brak`, dat is wel heel erg zacht uitgedrukt. Rijp voor de vuilverbranding is meer op z'n plaats.

de file wordt chmod 777 en 777 staat gelijk aan executeerbaar, voor een file is 655 voldoende

dus als ik een mooi shellsciptje weet te uploaden, dan kan dat worden uitgevoerd. Resultaat kan dan zijn dat je alles kwijt bent.


een directory heeft aan 765 voldoende
Gewijzigd op 26/06/2010 17:36:31 door Noppes Homeland
 
Bram Boos

Bram Boos

26/06/2010 17:51:21
Quote Anchor link
Oke, zal ik onthouden. Maar kan dit probleem opgelost worden of is het onbegonnen werk?
 
Noppes Homeland

Noppes Homeland

26/06/2010 17:54:33
Quote Anchor link
Alle problemen zijn op te lossen, maar ik zal adviseren om dit te verbranden en zelf in 40 regels een goede fileupload afhandeling te schrijven, zit je ook niet vast aan andermans fratsen .
 
- SanThe -

- SanThe -

26/06/2010 17:56:02
Quote Anchor link
Noppes Homeland op 26/06/2010 17:34:03:
de file wordt chmod 777 en 777 staat gelijk aan executeerbaar, voor een file is 655 voldoende

een directory heeft aan 765 voldoende


Beide antwoorden zijn fout.

File => 644
Map => 755
 
Bram Boos

Bram Boos

26/06/2010 18:02:36
Quote Anchor link
Noppes Homeland op 26/06/2010 17:54:33:
Alle problemen zijn op te lossen, maar ik zal adviseren om dit te verbranden en zelf in 40 regels een goede fileupload afhandeling te schrijven, zit je ook niet vast aan andermans fratsen .


Nou dan kan ik wel ophouden. Heb totaal geen kaas gegeten van OOP terwijl alles OOP is gescript :-(
 
Niels K

Niels K

26/06/2010 18:43:36
Quote Anchor link
Ik ben bezig met upload script in OOP. Deze wordt door verschillende profs gecontroleerd maar is nog niet klaar. Is het heel urgent?
 
Bram Boos

Bram Boos

26/06/2010 18:57:32
Quote Anchor link
Ja, eigenlijk voor morgen. Is voor een klant van mij die dit script heeft gekocht van iemand anders en ik mag de fouten mooi weer oplossen.

Eigenlijk krijg ik nu de neiging om een volledig VEILIG script te maken voor deze klant ipv afval gaan verbeteren...
 
Niels K

Niels K

26/06/2010 19:01:43
Quote Anchor link
Moet dat in OOP?
 
Bram Boos

Bram Boos

26/06/2010 19:02:39
Quote Anchor link
Het liefst wel maar waarschijnlijk gaat die niet moeilijk doen als het goed werkt zonder gebruik van OOP.
 
Niels K

Niels K

26/06/2010 19:07:42
Quote Anchor link
Ok
 



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.