I want to create a simple script for uploading files from local maschine (windows) to a web servers (linux) directory.

I found on the net some example codes and make the two parts of that simple script.

1. The HTML form creation...

<html>
<body>
<form enctype="multipart/from-data" action="upload.php" method="POST">
Choose a file: <input name="uploaded" type="file" /><br />
<input type="submit" value="Upload" />
</form>
</body>
</html>

2. ...which calls the upload.php script

<?php
$target='/srv/www/htdocs/www/';
$target= $target . basename($_FILES['uploaded']['name']);
if(move_uploaded_file($_FILES['uploaded']['tmp_name'], $target))
    {
         echo "File". basename($_FILES['uploadedfile']  
         ['name']). "uploaded succesfully";
     }
     else
     {
       echo "An error occured";
      }
?>

I get "An error occured" message while trying to upload something.

I might have also problems with the file permission in linux.
I create a ./upload/ directory in the www root and I don't exactly know who should be the owner of that directory and in what group it should be. I tried the user and group wich is udsed for apache.

Can anyone help please?

Recommended Answers

All 11 Replies

The owner of the directory should be php, not apache.

Also:

if(move_uploaded_file($_FILES['uploaded']['tmp_name'], $target))
    {
         echo "File". basename($_FILES['uploadedfile']  
         ['name']). "uploaded succesfully";
     }
     else
     {
       echo "An error occured. Error code: ".$_FILES['uploadedfile']['error'];
      }

And check the code against http://www.php.net/manual/en/features.file-upload.errors.php

I have not such a user (php). (its SuSE Enter.serv. 10 distro).

And the error output gives nothing :sad:

I cache the tcp stream when trying the uplod script and in the tcp stream is shown that the uploaded=C%3A%5Ctext.txt

Where the text.txt file is on the local disk C:/

But it seems to mee that there is something wrong with uploaded??

Really seems to be the permissions. There should be a user for php (it's not named php) but php runs under some user name (sorry for not being specific, I'm not a *nix guru).

Well, if you can't get it going, set the permissions to 0777 then. It's not very secure, but you can move the upload directory out from the web server root, so it's not accessible in public, to improve the security.

I am going to check the php.ini maybe it will be there. ( or somewhere in the apache confs)

I think in linux the user will be the wwwrun which is for apache and apache uses php as modul - so php will be probably the same ( not sure about it).

I am going to thread in linux forums.
Thanks

I have find some error-logs wich tells:

error: PHP Notice: Undefined index: uploaded in /srv/www/htdocs/www/upload.php on line 3 referer: http://www.mydomain.com/

and same in the line 4, 10

it seems like it dose not know these variables...

What php version do you have installed?

I use php version 5.1.2-29.5.

I made several tests. I checked the php modules and I found out I did not include several modules. I think the most important was the ctype Extension module.
choose a litle drastic method and checked all extension modules to be included.
But I dont know which ones are needed.

the uploading starts to work after I found an another script on the net whith one more function in it.

is_uploaded_file($_FILES['upload']['tmp_file'])

after this function the move_uploaded_file(...) starts to work.

It seems strange that is_uploaded_file changes anything, it only tells whether the file was uploaded. I'll keep that in mind for future reference. Glad you worked it out. :)

But I included all the modules which was not included. I need now to leav only those modules wich are needed for works like this. ( uploading and downloading files for administration of www directory, and web-cyradm for email administration)


Can you have please a look at it...
I list them:

php5-

bcmath
bz2
calendar
ctype
curl
dba
dbase
devel
dom
exif
fastcgi
filepro
ftp
gd
gettext
gmp
iconv
imap
ldap
mbstring
mcrypt
mhash
mysql
mysqli
ncurses
odbc
openssl
pcntl
pdo
pear
pear-log
pgsql
posix
pspell
shmop
snmp
soap
socket
sqlite
sysvmsg
sysvsem
sysvshm
tokenizer
wddx
xmlreader
xmlrpc
xsl
zlib

Actually file uploads is a built-in php feature and no additional extensions are required. At least there's no mentioning of special requirements in php manual.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.