2016-05-24 2 views
0

У меня возникла проблема с загрузкой на FTP с моего сайта через PHP.FTP через PHP Ошибка

Он соединяет OK, но затем возникает проблема с загрузкой изображения.

HTML

<form action="../scripts/php/saveupload.php" method="post"> 
    <input name="file" type="file" /> 
    <input name="submit" type="submit" value="Upload File" /> 
</form> 

PHP

$ftp_server = "XXXXXX"; 
$ftp_user_name = "XXXXX"; 
$ftp_user_pass = "XXXXX"; 
$destination_file = "/public_html/img/news/"; 
$source_file = $_FILE['file']['tmp_name']; 

// set up basic connection 
$conn_id = ftp_connect($ftp_server); 
ftp_pasv($conn_id, true); 

// login with username and password 
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); 

//check connection 
if ((!$conn_id) || (!$login_result)) { 
    echo "FTP connection has failed!"; 
    echo "Attempted to connect to $ftp_server for user $ftp_user_name"; 
    exit; 
} else { 
    echo "Connected to $ftp_server, for user $ftp_user_name"; 
} 

// upload the file 
$upload = ftp_put($conn_id, $destination_file, $source_file); 

// check upload status 
if (!$upload) { 
echo "FTP upload has failed!"; 
} else { 
echo "Uploaded $source_file to $ftp_server as $destination_file"; 
} 

// close the FTP stream 
ftp_close($conn_id); 

сообщение я получаю:

«Подключен к ftp.theucl.co.uk для пользователя У theucl.co.ukFTP upload есть не удалось! "

This is now the error I am getting after following Niths advice on the error...

Это ошибка появляется вокруг следующий ..

$source_file = $_FILES['file']['tmp_name']; 

и

$upload = ftp_put($conn_id, $destination_file.$_FILES['file']['tmp_name'], $source_file,FTP_ASCII); 

Очевидно, есть общая Apperance среди этой

+3

Те Арен Ваши настоящие верительные грамоты ... они? –

+0

Проверьте разрешение на папку. Я предполагаю, что текущее разрешение установлено на 755.Установите его на 777 –

+2

. Я бы рекомендовал не устанавливать разрешения для 777. Это риск для безопасности. Правильно ли проверены права доступа к папке. –

ответ

0

решаемые его с помощью учебника на Youtube от Thorn Web ... вместо того, чтобы изменять то, что я был выше, я перезапустил и теперь следующее:

<?php 

    if($_POST['submit']){ 

     $name = $_FILES['upload']['name']; 
     $temp = $_FILES['upload']['tmp_name']; 
     $type = $_FILES['upload']['type']; 
     $size = $_FILES['upload']['size']; 

     if(($type == "image/jpeg") || ($type == "image/jpg") || ($type == "image/gif")){ 

       if($size <= 1000000){ 

        move_uploaded_file($temp, "../img/news/$name"); 


       }else{ 

        echo "The file: '<b>$name</b>' is too big...<br> 
        The size is <b>$size</b> and needs to be less than 100GB. "; 
       }  
     }else{ 
      echo "This type '<b>$type</b>' is not allowed"; 
     } 
    } 

?> 

Это работает удовольствие

1

Есть несколько корр в вашем коде. Проверьте разрешение папки назначения, где вы загружаете файлы. Подтвердите, что папка имеет доступ для записи. ** Если загрузка не удалась, проверьте с помощью обработчика ошибок и выполните необходимые изменения, например, создайте папку назначения для загрузки, назначьте разрешение файла и т. Д. **

Сначала в вашей форме html добавьте тип enctype.

HTML

<form action="../scripts/php/saveupload.php" method="post" enctype="multipart/form-data"> 
    <input name="file" type="file" /> 
    <input name="submit" type="submit" value="Upload File" /> 
</form> 

А потом в PHP файл Totally 3 изменений. Я напечатал эти строки ниже. Просто сравните эти три изменения с вашим кодом. В вашей программе $ source_file говорит $ _FILE не определен. И, я использовал ftp-порт 21 в ftp_connect() функция. В ftp_put() использования четвёртые переменное, как FTP_ASCII или FTP_BINARY

$source_file = $_FILES['file']['tmp_name']; 
$conn_id = ftp_connect($ftp_server,21); 
$upload = ftp_put($conn_id, $destination_file.$_FILES['file']['name'], $source_file,FTP_ASCII); 

Для полной программы

PHP

ini_set("display_errors", "1"); 
    error_reporting(E_ALL); 
    ini_set('display_startup_errors',1); 
    error_reporting(-1); 
    print_r(error_get_last()); 

    $ftp_server = "XXXXXX"; 
    $ftp_user_name = "XXXXX"; 
    $ftp_user_pass = "XXXXX"; 
    $destination_file = "/public_html/img/news/"; 
    $source_file = $_FILES['file']['tmp_name']; 

    // set up basic connection 
    $conn_id = ftp_connect($ftp_server,21); 
    ftp_pasv($conn_id, true); 

    // login with username and password 
    $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); 

    // check connection 
    if ((!$conn_id) || (!$login_result)) { 
     echo "FTP connection has failed!"; 
     echo "Attempted to connect to $ftp_server for user $ftp_user_name"; 
     exit; 
    } else { 
     echo "Connected to $ftp_server, for user $ftp_user_name"; 
    } 

    // upload the file 
    $upload = ftp_put($conn_id, $destination_file.$_FILES['file']['name'], $source_file,FTP_ASCII); 

    // check upload status 
    if (!$upload) { 
    echo "FTP upload has failed!"; 
    } else { 
    echo "Uploaded $source_file to $ftp_server as $destination_file"; 
    } 

    // close the FTP stream 
    ftp_close($conn_id); 

Я прочитал много статей и обнаружил, что имени пользователя и пароль должен содержать только буквенно-цифровой.Также я попробовал $ ftp_server как ваш localhost.

Чтобы проверить программу, попробуйте любой внутренний сервер (один для обоих файлов php и того же сервера для передачи файлов ftp). Я знаю, что нет никакого использования того же сервера, что и FTP для передачи файлов. Но попробуйте загрузить файл на том же сервере. Если FTP-процесс работает нормально, мы попробуем изменить ftp-сервер.

+0

[Выше это ошибка веб-страницы, возникающая при попытке загрузить изображение, ниже - сценарий.] [1] [1]: http://i.stack.imgur.com/vxFt2.png –

+0

@SamAnderson Надеюсь, вы уже сменили пароль :) –