2014-01-14 4 views
1

Я программировал годами с различными языками программирования. У меня также есть опыт работы с языками разметки и написания сценариев. Я новичок в PHP. Я пытаюсь исправить сайт своего отца для него, и я многому учусь, когда ухожу. Я многое исправил, но в настоящее время я застрял. Обновление на хосте PHP, которое мой папа использует с 5.1 до 5.4, нарушило веб-сайт. Я заметил, что одно из изменений заключается в том, что переменные должны быть определены сейчас. Я исправил множество функций, но у меня возникли проблемы с исправлением части, которая позволяет пользователю веб-сайта загружать изображение на сервер. Файл просто не загружается, и я не уверен, почему. Вот PHP:Загрузка файла с помощью PHP

$file = $_POST['file']; 
$file_name = $_POST['file']['name']; 
if ($file && $file_name) 
{ 
if ($_FILES['file']['size']>$maxsize) $status = "Error: Picture size too large. Max  file size is $maxsize bytes.<br>"; 
if (($_FILES['file']['type']!="image/gif") && ($_FILES['file'] ['type']!="image/jpeg") && ($_FILES['file']['type']!="image/jpg") && ($_FILES['file'] ['type']!="image/png")) $status .= "Error: Wrong file type. Must be JPG or GIF only.<br>"; 
$picext = substr($file_name,-3); 
    $picext = strtolower($picext); 
if ((!isset($status)) && ($picext!="gif") && ($picext!="jpg") && ($picext!="png")) $status .= "Error: Wrong file type. Must be JPG or GIF or PNG only.<br>"; 
} 

if (!isset($status)){ 


//die("write".$id); 

$email = $_POST['email']; 
$aim = $_POST['aim']; 
$icq = $_POST['icq']; 
$yahoo = $_POST['yahoo']; 
$homepage = $_POST['homepage']; 
$myip = $_POST['myip']; 
if (!$myip) $myip = $ip; 
$email2 = $_POST['email2']; 
$password = $_POST['password']; 
$title = $_POST['title']; 
$download = $_POST['download']; 
$approved = $_POST['approved']; 
$allowdelete = $_POST['allowdelete']; 
$author = $_POST['author']; 
$facebook = $_POST['facebook']; 
$piclink = $_POST['piclink']; 
$domain = $_POST['domain']; 
$option3 = $_POST['option3']; 
$secret = $_POST['secret']; 
$q= "insert into $table values('', '$email', '$aim', '$icq', '$yahoo', '$homepage',  '0','0', '0', '0', '0', '0', '',  now(),'$myip','$email2','$password','$title','$download','$approved','$allowdelete','$auth    or','$facebook','$piclink','$domain','$option3','$secret')"; 
    $result = mysql_query($q) or die("Failed: $sql - ".mysql_error()); 
    $q = "select max(id) from $table"; 
    $result = mysql_query($q); 
    $resrow = mysql_fetch_row($result); 
    $id = $resrow[0]; 
    $picext = "png"; 
    $q = "update $table set picfile = '".$id.".".$picext."' where id='$id'"; 
    $result = mysql_query($q); 
    $file = $_POST['file']; 
    @copy($file, "../pics/".$id.".".$picext); 
    $picfile=$id.".".$picext; 
    $act = "update"; //set mode back to update 
    Header("Location: newadmin.php?id=$id"); 

} 

Вот форма HTML код:

<td width="91"><div align="right"><font size="-1" face="Verdana, Arial, Helvetica,   sans-serif">Upload 
    Picture:</font></div></td> 
    <td width="403"><font size="-1" face="Verdana, Arial, Helvetica, sans-serif"> 
    <form name='file' method='post' enctype="multipart/form-data" action="newadmin.php"> 
    <input name="file" type="file" size="50" maxlength="50"> 
    </form> 
    </font></td> 
    <td width="200">&nbsp;</td> 
    <td width="18">&nbsp;</td> 
</tr> 
<tr> 
    <td width="91"> 
    <div align="right"><font size="-1" face="Verdana, Arial, Helvetica, sans-serif"> 
     <!-- update & create button --> 
    <button type='submit' name='submit' value='Submit'><img src='../images/formbutton.gif' width='40' height='40' /><?echo $tag;?> 

Любая помощь будет принята с благодарностью. Если это помогает, по какой-то причине в error_log $ picext не устанавливается. Но если я поставлю «$ picext =" png ";" Файл по-прежнему не загружается.

+0

Вы пытались сделать простой файл загрузчик, чтобы увидеть, если проблема с этим кодом или обновлением хоста в целом? – Floris

+1

У меня не было, но ответ Криш Р. получил ниже. Спасибо! –

ответ

2

Попробуйте использовать,

$file = $_FILES['file']['name']; 
move_uploaded_file($_FILES['file']['tmp_name'], "../pics/".$id.".".$picext); 

вместо

$file = $_POST['file']; 
+0

Это сработало чудесно! Большое вам спасибо Криш Р.! Что нового делает код по-другому? –

+2

Некоторые хосты могут отключить функцию 'copy()' для обеспечения безопасности –

+0

А я вижу. Каковы уязвимости безопасности? –

0

Изменить первые две строки:

$file = $_FILES['file']; 
$file_name = $_FILES['file']['name']; 

и эти строки:

$file = $_POST['file']; 
@copy($file, "../pics/".$id.".".$picext); 

к:

$file = $_FILES['file']; 
move_uploaded_file($file['tmp_name'],"../pics/".$id.".".$picext); 
+2

это '$ _FILES' не' $ _FILE' –

+0

, конечно, спасибо :) –

Смежные вопросы