[php] Uploaden (again)

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

  • Vulpecula
  • Registratie: April 2001
  • Laatst online: 17-09 23:05
Ik heb het onderstaand pp script gemaakt maar nu als ik een file wil uploaden krijg ik telkens de volgende foutmelding.

Warning: Unable to open 'D:\Foto's site Astroplanet\mars.gif' for reading: No such file or directory in /home/franksch/astroplanet-www/beheer/verwerk.php3 on line 27

Ik heb de search gebruikt maar heb geen bruikbare informatie gevonden. Ik heb ook de map waar het naartoe ge upload moet worden om chmod 777 gezet.
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
<?
if ($titel=="" OR $kort=="" or $artikel=="")
{
echo "U heeft niet alle velden goed ingevuld.<BR>";
echo"<br><a href=\"javascript:history.back()\">Ga terug</a> om alles goed in te vullen";
exit;
}else{
//copy image
if ($file !==""){
$length = "10";
$pext = getFileExtension($file);
if (($pext !=="jpg") &amp;&amp; ($pext !=="gif") &amp;&amp; ($pext !=="png") &amp;&amp; ($pext !=="jpeg")){
echo "Je heb geen geldig bestand opgegeven. Je kunt alleen foto's in het formaat .jpg, .gif of .png uploaden!";
echo"<BR><a href=\"javascript:history.back()\">Terug</a>";
exit;
}elseif ($file_size =="0" or $file_size>"80000"){
echo "Het bestand is te groot, u kunt maximaal een bestand van 80kb uploaden!";
echo"<BR><a href=\"javascript:history.back()\">Terug</a>";
exit;
}else{
$pwd = GeneratePWD($length);
$directory = dirname($HTTP_SERVER_VARS["PATH_TRANSLATED"]);
copy($file,"$directory/nieuws/images/$pwd.$pext");
$pad="images/$pwd.$pext";
}
}
//einde copy image


 $datume=date(YmdHis);

 $artikel=trim($artikel);
 $artikel=nl2br($artikel);
 $artikel=addslashes($artikel);
 $artikel=ucfirst($artikel);

 $titel=addslashes($titel);
 $titel=trim($titel);
 $titel=ucfirst($titel);

 $kort=trim($kort);
 $kort=nl2br($kort);
 $kort=addslashes($kort);
 $kort=ucfirst($kort);

 $url=addslashes($url);
 if(!$url==""){
 if (!eregi("^http","$url")) {
 $url="http://$url";
 }
 }

 include("../connect.php3");
 $max_nieuws_id = mysql_query("SELECT max(nieuws_id) AS nieuws_nummer FROM news");
 $nieuws_id = mysql_result($max_nieuws_id,nieuws_nummer);
 $nieuws_id++;
 $result=mysql_query("insert into news (nieuws_id,datum,titel,kort,artikel,url,images,datume)
 values ('$nieuws_id','$datum','$titel','$kort','$artikel','$url','$pad','$datume')")or die (mysql_error());
 echo"De gegevens zijn succesvol opgeslagen in onze database";
 }

?>
</body>
</html>
<?
function GeneratePWD($length)
{
  $letters = array('a','b','c','d','e','f','g','h','i','j','k','l','m',
                   'n','o','p','q','r','s','t','u','v','w','x','y','z',
                   'A','B','C','D','E','F','G','H','I','J','K','L','M',
                   'N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
                   '0','1','2','3','4','5','6','7','8','9'
                  );
  srand((double) microtime() * 1000000);
  for ($c = 0; $c < $length; $c++)
    $password .= $letters[rand(0,count($letters))];

  return $password;
}

function getFileExtension($str) {
$i = strrpos($str,".");
if (!$i) { return ""; }
$l = strlen($str) - $i;
$ext = substr($str,$i+1,$l);
return $ext;
}
?>

:'(

  • elnino
  • Registratie: Augustus 2001
  • Laatst online: 03-09 05:13
Op zondag 09 september 2001 19:43 schreef frankschers het volgende:
Warning: Unable to open 'D:\Foto's site Astroplanet\mars.gif' for reading: No such file or directory in /home/franksch/astroplanet-www/beheer/verwerk.php3 on line 27
Wat staat er nou precies op die regel 27? (Ik heb geen zin om te tellen ;))

  • razor-x
  • Registratie: Februari 2001
  • Laatst online: 05-06 07:37
(jarig!)
Engels :
Warning: Unable to open 'D:\Foto's site Astroplanet\mars.gif' for reading: No such file or directory in /home/franksch/astroplanet-www/beheer/verwerk.php3 on line 27

Nederlands :
KIJK UIT !!! : IK KAN 'D:\Foto's site Astroplanet\mars.gif' NIET OPENEN !!!: KAN DE FILE OF DIR NIET VINDEN ! in /home/franksch/astroplanet-www/beheer/verwerk.php3 op lijn 27 !

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
http://www.php.net/manual/en/features.file-upload.php

daar staat uitgelegd hoe je bestanden moet uploaden. mbv een form dus.

  • Vulpecula
  • Registratie: April 2001
  • Laatst online: 17-09 23:05
regel 27 : copy($file,"$directory/nieuws/images/$pwd.$pext");

  • razor-x
  • Registratie: Februari 2001
  • Laatst online: 05-06 07:37
(jarig!)
Op zondag 09 september 2001 19:51 schreef frankschers het volgende:
regel 27 : copy($file,"$directory/nieuws/images/$pwd.$pext");
moeten dubbellen slashes zijn volgensmij

  • Vulpecula
  • Registratie: April 2001
  • Laatst online: 17-09 23:05
Op zondag 09 september 2001 19:49 schreef marcusk het volgende:
http://www.php.net/manual/en/features.file-upload.php

daar staat uitgelegd hoe je bestanden moet uploaden. mbv een form dus.
Als ik ENCTYPE="multipart/form-data" dan kan ik de extentie niet meer controleren.

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
Op zondag 09 september 2001 19:54 schreef razor-x het volgende:

[..]

moeten dubbellen slashes zijn volgensmij
nope. alleen bij backslashes, omdat dat een escape-char is.

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
Op zondag 09 september 2001 19:55 schreef frankschers het volgende:
Als ik ENCTYPE="multipart/form-data" dan kan ik de extentie niet meer controleren.
je kunt $userfile_name of $userfile_type gebruiken om de extensie te achterhalen, en dan bepalen of je het bestand verwijderd of verplaatst uit de temp-dir.

  • elnino
  • Registratie: Augustus 2001
  • Laatst online: 03-09 05:13
Op zondag 09 september 2001 19:55 schreef frankschers het volgende:
Als ik ENCTYPE="multipart/form-data" dan kan ik de extentie niet meer controleren.
Kun je de HTML-code van het formulier posten?

  • Vulpecula
  • Registratie: April 2001
  • Laatst online: 17-09 23:05
<form enctype="multipart/form-data" method=post action="verwerk.php3">
<input type="hidden" name="datum" value="<?echo"$datum";?>">

<P>Titel van het artikel:<BR>
<input type="text" size=60 maxlength=100 name="titel">
<BR>

<p>URL:<br>
<input type="text" size=60 maxlength=100 name="url" value="">
<BR>

<p>Korte samenvatting:<BR>
<textarea name="kort" cols=40 rows=4>
</textarea>
<BR>

<P>Artikel:<BR>
<textarea name="artikel" cols=40 rows=15>
</textarea>
<br>
<bR>

<p>Foto:<BR>
<input type="file" name="file">

<br><br>
<input type="submit" name="submit" value="Sla op">
<input type="reset" value="Wis velden">
</form>

Dit is het invulformulier

  • elnino
  • Registratie: Augustus 2001
  • Laatst online: 03-09 05:13
Op zondag 09 september 2001 20:09 schreef frankschers het volgende:
code:
1
2
<p>Foto:<BR>
<input type="file" name="file">
Volgens de php manual moet je dit zetten:
code:
1
<INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="1000">

(Verander die 1000 in het maximale toegestane bytes). Zie http://www.php.net/manual/nl/features.file-upload.php. Misschien helpt dat?

  • Vulpecula
  • Registratie: April 2001
  • Laatst online: 17-09 23:05
Maakt niets uit. Krijg steeds dezelfde fout

  • elnino
  • Registratie: Augustus 2001
  • Laatst online: 03-09 05:13
Warning: Unable to open 'D:\Foto's site Astroplanet\mars.gif' for reading: No such file or directory in /home/franksch/astroplanet-www/beheer/verwerk.php3 on line 27.
Wat overigens ook vreemd is, is dat het bestand in een windowsdirectory staat 'D:\Foto's site...' en het php-bestand in een UNIX-stijl-directory '/home/franksch...'. (Misschien iets te maken met Apache :?)

Mijn vraag is nu:
Op welk systeem werkt het script en met welke server (PWS/Apache/IIS- thuis of op een andere host)?

En welke versie van PHP?

  • Vulpecula
  • Registratie: April 2001
  • Laatst online: 17-09 23:05
Op zondag 09 september 2001 20:30 schreef elnino het volgende:

[..]

Wat overigens ook vreemd is, is dat het bestand in een windowsdirectory staat 'D:\Foto's site...' en het php-bestand in een UNIX-stijl-directory '/home/franksch...'. (Misschien iets te maken met Apache :?)

Mijn vraag is nu:
Op welk systeem werkt het script en met welke server (PWS/Apache/IIS- thuis of op een andere host)?

En welke versie van PHP?
ik heb het script getest op een Windows NT 5.0 pc. Vervolgens geupload naar een linux server. De php versie die op de Windows NT 5.0 pc draait is 4.0.4pl1
en op de linux bak is dat hetzelfde.
De windows bak is van mij. De linux van de hoster.

  • elnino
  • Registratie: Augustus 2001
  • Laatst online: 03-09 05:13
Op zondag 09 september 2001 20:37 schreef frankschers het volgende:
ik heb het script getest op een Windows NT 5.0 pc. Vervolgens geupload naar een linux server. De php versie die op de Windows NT 5.0 pc draait is 4.0.4pl1
en op de linux bak is dat hetzelfde.
De windows bak is van mij. De linux van de hoster.
En die foutmelding is dus van de linux-server. OK, dat ik het ff weet...

Blijkbaar bevat $file de bestandsnaam op de WinNT computer en niet die op de Linux-computer... Beetje vreemd. Vervang $file nu eens door $HTTP_POST_FILES['file']['tmp_name'].

Dus
PHP:
1
2
3
<?
copy($HTTP_POST_FILES['file']['tmp_name'],"$directory/nieuws/images/$pwd.$pext");
?>

Succes ermee...

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
je moet move_uploaded_file($userfile, "$directory/nieuws/images/$pwd.$pext") gebruiken.

  • Vulpecula
  • Registratie: April 2001
  • Laatst online: 17-09 23:05
Waarom werkt het allemaal niet.
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
<?
if ($titel=="" OR $kort=="" or $artikel=="")
{
echo "U heeft niet alle velden goed ingevuld.<BR>";
echo"<br><a href=\"javascript:history.back()\">Ga terug</a> om alles goed in te vullen";
exit;
}else{
//copy image
if ($file !==""){
$length = "10";
$pext = getFileExtension($file);
if (($pext !=="jpg") &amp;&amp; ($pext !=="gif") &amp;&amp; ($pext !=="png") &amp;&amp; ($pext !=="jpeg")){
echo "Je heb geen geldig bestand opgegeven. Je kunt alleen foto's in het formaat .jpg, .gif of .png uploaden!";
echo"<BR><a href=\"javascript:history.back()\">Terug</a>";
exit;
}elseif ($file_size =="0" or $file_size>"80000"){
echo "Het bestand is te groot, u kunt maximaal een bestand van 80kb uploaden!";
echo"<BR><a href=\"javascript:history.back()\">Terug</a>";
exit;
}else{
$pwd = GeneratePWD($length);
$directory = dirname($HTTP_SERVER_VARS["PATH_TRANSLATED"]);
move_uploaded_file($userfile, "$directory/nieuws/images/$pwd.$pext");
$pad="images/$pwd.$pext";
}
}
//einde copy image


 $datume=date(YmdHis);

 $artikel=trim($artikel);
 $artikel=nl2br($artikel);
 $artikel=addslashes($artikel);
 $artikel=ucfirst($artikel);

 $titel=addslashes($titel);
 $titel=trim($titel);
 $titel=ucfirst($titel);

 $kort=trim($kort);
 $kort=nl2br($kort);
 $kort=addslashes($kort);
 $kort=ucfirst($kort);

 $url=addslashes($url);
 if(!$url==""){
 if (!eregi("^http","$url")) {
 $url="http://$url";
 }
 }

 include("../connect.php3");
 $max_nieuws_id = mysql_query("SELECT max(nieuws_id) AS nieuws_nummer FROM news");
 $nieuws_id = mysql_result($max_nieuws_id,nieuws_nummer);
 $nieuws_id++;
 $result=mysql_query("insert into news (nieuws_id,datum,titel,kort,artikel,url,images,datume)
 values ('$nieuws_id','$datum','$titel','$kort','$artikel','$url','$pad','$datume')")or die (mysql_error());
 echo"De gegevens zijn succesvol opgeslagen in onze database";
 }
?>

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
Op zondag 09 september 2001 21:29 schreef frankschers het volgende:
Waarom werkt het allemaal niet.
(php)
Wat is nu de fout?

Kun je trouwens geen identing gebruiken? je code is zo totaal onleesnbaar.

  • Vulpecula
  • Registratie: April 2001
  • Laatst online: 17-09 23:05
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
<?
if ($logged_in){
  echo $file;
  if ($titel=="" OR $kort=="" or $artikel==""){
    echo "U heeft niet alle velden goed ingevuld.<BR>";
    echo"<br><a href=\"javascript:history.back()\">Ga terug</a> om alles goed in te vullen";
    exit;
  }else{
    //copy image
    if ($file !==""){
      $length = "10";
      $pext = getFileExtension($file);
      if (($pext !=="jpg") &amp;&amp; ($pext !=="gif") &amp;&amp; ($pext !=="png") &amp;&amp; ($pext !=="jpeg")){
        echo "Je heb geen geldig bestand opgegeven. Je kunt alleen foto's in het formaat .jpg, .gif of .png uploaden!";
        echo"<BR><a href=\"javascript:history.back()\">Terug</a>";
        exit;
      }elseif ($file_size =="0" or $file_size>"80000"){
        echo "Het bestand is te groot, u kunt maximaal een bestand van 80kb uploaden!";
        echo"<BR><a href=\"javascript:history.back()\">Terug</a>";
        exit;
      }else{
        $pwd = GeneratePWD($length);
        $directory = dirname($HTTP_SERVER_VARS["PATH_TRANSLATED"]);
        move_uploaded_file($userfile, "$directory/nieuws/images/$pwd.$pext");
        $pad="images/$pwd.$pext";
      }
    }
    //einde copy image
    $datume=date(YmdHis);

    $artikel=trim($artikel);
    $artikel=nl2br($artikel);
    $artikel=addslashes($artikel);
    $artikel=ucfirst($artikel);

    $titel=addslashes($titel);
    $titel=trim($titel);
    $titel=ucfirst($titel);

    $kort=trim($kort);
    $kort=nl2br($kort);
    $kort=addslashes($kort);
    $kort=ucfirst($kort);

    $url=addslashes($url);
    if(!$url==""){
      if (!eregi("^http","$url")) {
        $url="http://$url";
      }
    }

    include("../connect.php3");
    $max_nieuws_id = mysql_query("SELECT max(nieuws_id) AS nieuws_nummer FROM news");
    $nieuws_id = mysql_result($max_nieuws_id,nieuws_nummer);
    $nieuws_id++;
    $result=mysql_query("insert into news (nieuws_id,datum,titel,kort,artikel,url,images,datume)
    values ('$nieuws_id','$datum','$titel','$kort','$artikel','$url','$pad','$datume')")or die (mysql_error());
    echo"De gegevens zijn succesvol opgeslagen in onze database";
  }
}
?>

Beter leesbaar?

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
Op zondag 09 september 2001 22:14 schreef frankschers het volgende:
Beter leesbaar?
nogal ja, maar je hebt nog niet gezegd wat de foutmelding was. Toch niet dezelfde nog neem ik aan?

  • Vulpecula
  • Registratie: April 2001
  • Laatst online: 17-09 23:05
Op zondag 09 september 2001 22:23 schreef marcusk het volgende:

[..]

nogal ja, maar je hebt nog niet gezegd wat de foutmelding was. Toch niet dezelfde nog neem ik aan?
Dit is de foutmelding. En het plaatje is zeker een gif.
[fout]
Je heb geen geldig bestand opgegeven. Je kunt alleen foto's in het formaat .jpg, .gif of .png uploaden!
[/fout]

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
doe getFileExtension($userfile_name), of nog beter:
code:
1
2
3
4
5
6
7
8
9
if ($userfile_type == "image/gif" || $userfile_type == "image/pjpeg" 
    || $userfile_type == "image/png") // ofzo
{
    // geldig
}
else
{
    // ongeldig
}

  • Vulpecula
  • Registratie: April 2001
  • Laatst online: 17-09 23:05
klopt krijg geen foutmelding meer. Maar er wordt niet veel geupload.
PHP:
1
2
3
<?
move_uploaded_file($userfile, "$directory/nieuws/images/$userfile_name");
?>

Toch niets fout aan, of wel dan?

  • Engineer
  • Registratie: Juni 2001
  • Laatst online: 04-05 00:03

Engineer

Software

Volledig path opgeven, dus:
copy($file,"d:/blaat/nieuws/images/$pwd.$pext"); :)

  • Vulpecula
  • Registratie: April 2001
  • Laatst online: 17-09 23:05
nee dat doet hij niet. Vreemd.

  • elnino
  • Registratie: Augustus 2001
  • Laatst online: 03-09 05:13
Op zondag 09 september 2001 23:08 schreef frankschers het volgende:
klopt krijg geen foutmelding meer. Maar er wordt niet veel geupload.
PHP:
1
2
3
<?
move_uploaded_file($userfile, "$directory/nieuws/images/$userfile_name");
?>

Toch niets fout aan, of wel dan?
1. Vervang $userfile door $file.
2. Indien dit niet werkt, probeer dan $HTTP_POST_FILES['file']['tmp_name'] i.p.v. $file.
3. Indien het nog steeds niet werkt, doe dan eens:
PHP:
1
2
3
<?
print $HTTP_POST_FILES['file']['tmp_name'];
?>

en kijk dan wat er uitkomt...

  • elnino
  • Registratie: Augustus 2001
  • Laatst online: 03-09 05:13
De oplossing (door mij getest):

Vervang het gedeelte tussen $length=10; (ongeveer regel 11) en }elseif ($file_size == "0" or $file_size>"80000"){ door:
PHP:
1
2
3
4
5
6
7
8
<?
      $pext = getFileExtension($file_name);
      if (!($file_type == "image/gif" or $file_type == "image/pjpeg"  or $file_type == "image/png"))
      {
        echo "Je heb geen geldig bestand opgegeven. Je kunt alleen foto's in het formaat .jpg, .gif of .png uploaden!";
        echo"<BR><a href=\"javascript:history.back()\">Terug</a>";
        exit;
?>

Zorg dat bij move_uploaded_file die $userfile is vervangen door $file. Zie vorige posts.

Hij werkt in ieder geval op PWS.
Pagina: 1