2010-09-20 3 views
-4

Дорогие друзья, это скрипт, который просто загружает файл и вставляет имя файла в базу данных, почему это не работает? Он просто загружает файл и отправляет имя файла в db даже после проверки. Пожалуйста, помогитеПочему этот скрипт проверки загрузки файла php не работает?

<?php 

//file validation starts 
//split filename into array and substract full stop from the last part 
$tmp = explode('.', $_FILES['photo']['name']); 
$fileext= $tmp[count($tmp)-1]; 

//read the extension of the file that was uploaded 
$allowedexts = array("png"); 
if(in_array($fileext, $allowedexts)){ 
    return true; 
}else{ 
    $form_error= "Upload file was not supported<br />"; 
    header('Location: apply.php?form_error=' .urlencode($form_error)); 
} 


//file validation ends 

//upload dir for pics 
$uploaddir = './uploads/'; 


//upload file in folder 
$uploadfile = $uploaddir. basename($_FILES['photo']['name']); 


//insert filename in mysql db 
$upload_filename = basename($_FILES['photo']['name']); 



//upload the file now 
    move_uploaded_file($_FILES['photo']['tmp_name'], $uploadfile); 

// $photo value is goin to db 
$photo = $upload_filename; 
+5

Какая часть не работает? Какая ошибка или поведение вы получаете вместо этого? – mkoistinen

+1

Есть ошибки? – piddl0r

+0

Кажется, ваше обнаружение расширения файла не удается. См. Http://stackoverflow.com/questions/3179294/how-to-find-the-extension-of-an-image-from-path-in-php/3179305#3179305 – fabrik

ответ

3
function send_error($error = 'Unknown error accured') 
{ 
    header('Location: apply.php?form_error=' .urlencode($error)); 
    exit; //!!!!!! 
} 
//file validation starts 
//split filename into array and substract full stop from the last part 

$fileext = end(explode('.', $_FILES['photo']['name'])); //Ricky Dang | end() 

//read the extension of the file that was uploaded 
$allowedexts = array("png"); 
if(!in_array($fileext, $allowedexts)) 
{ 
} 

//upload dir for pics 
$uploaddir = './uploads/'; 
if(!is_dir($uploaddir)) 
{ 
    send_error("Upload Directory Error"); 
}  

//upload file in folder 
$uploadfile = $uploaddir. basename($_FILES['photo']['name']); 

if(!file_exists($uploadfile)) 
{ 
    send_error("File already exists!"); 
} 

//insert filename in mysql db 
$upload_filename = basename($_FILES['photo']['name']); 

//upload the file now 
if(move_uploaded_file($_FILES['photo']['tmp_name'], $uploadfile)) 
{ 
    send_error('Upload Failed, cannot move file!'); 
} 

// $photo value is goin to db 
$photo = $upload_filename; 

Это является прояснились версия вашего, дать, что идти и посмотреть, если вы получаете какие-либо ошибки

+0

спасибо, небольшой недосмотр. – RobertPitt

0

Вы также можете найти расширение файла, используя этот код.

$tmp = end(explode('.', $_FILES['photo']['name'])); 

$tmp получил расширение файла.

0

Почему бы не использовать встроенные функции PHP для извлечения расширения из файла?

$fileext = pathinfo($_FILES['photo']['name'],PATHINFO_EXTENSION); 

И если расширение файла является допустимым, вы возвращение из функции, не делая ничего дальше, если это недопустимое вы устанавливаете заголовок, но логика коды будет продолжать вашу обработку файлов

+0

Почему downvote? –

+0

+1 действительный ответ - очень полезно, и я ненавижу, когда люди сбивают и не комментируют. –

+0

Убедитесь, что вы не полагаетесь на данное расширение файла. Изменение extenstion файлов не является проблемой вообще. Я вижу, что ваша переменная называется «фото» - так взгляните на getimgagesize(): http://php.net/getimagesize –

0

Вы слепо предположить, загрузка файла успешно, но есть много причин для того, чтобы терпят неудачу, поэтому PHP обеспечивает ['error'] в массиве $ _FILES:

if ($_FILES['photo']['error'] === UPLOAD_ERR_OK) { 
    // uploaded properly, handle it here... 
} else { 
    die("File upload error, code #" . $_FILES['photo']['error']); 
} 

коды ошибок defined here.