Загрузка PHP FTP_PUT в каталог

Я изучаю PHP самостоятельно из книги под названием "PHP Complete Reference - PHP5.2" Im в настоящее время в главе 11 FTP, загрузка, удаление, makedir и т.д., Но столкнулись с несколькими вопросами, не охваченными книгой:

Согласно моему учебнику, это простой код для загрузки на сервер:

$connect=ftp_connect("johnsite.com");
$result=ftp_login($connect,"[email protected]","johnnyWalker");
if(!$result){
echo'Could not connect to Server';  
}
$result=ftp_put($connect,'myFile.php',FTP_ASCII);
echo'UPLOADING FILE......';
if($result){
    echo'File Uploaded!';
}

Мои вопросы:

  • В какую директорию будет загружена эта загрузка, как мне изменить код, если я хочу загрузить в каталог, скажем public_html/images/myFile.jpg
  • В примере myFile.php является жестко запрограммированным, что, если я хочу, чтобы пользователь выбирал файл для загрузки? Правильно ли я предполагаю, что вы можете сделать что-то вроде этого:

    <input type="file" name="myFile" value="upload a file" />
    <input type="submit" name="upload" />
    
    if(isset($_POST['upload'])){
        $fileName=$_POST['myFile']; //file is now assigned to var name
        $result=ftp_put($connect,$fileName,FTP_ASCII); //file linked to var name being uploaded
    }
    
  • Является ли это наиболее эффективным безопасным способом?

Спасибо за чтение

Ответ 1

Как сказал @Bonner, ответ Fabien неверен, так как вы ищете script для загрузки файлов со страницы вашего сайта на сервер.

Прежде всего помнить, что функция ftp_put() всегда будет перезаписывать существующие файлы. Вместо этого я предлагаю вам взглянуть на PHP move_uploaded_file

код

Это форма. Внутри атрибута action мы указываем файл, который обрабатывает и обрабатывает все файлы. Вам нужно будет использовать значение multipart/form-data для свойства enctype формы.

Я использовал комментарии почти везде для лучшего понимания.

<form action="upload.php" method="post" enctype="multipart/form-data">
    File: <input type="file" name="upload-file" size="30" />
    <input type="submit" name="submit" value="Upload file" />
</form>

upload.php

<?php
    // Used to determinated if the upload file is really a valid file
    $isValid = true;
    // The maximum allowed file upload size
    $maxFileSize = 1024000;
    //Allowed file extensions
    $extensions = array('gif', 'jpg', 'jpeg', 'png');

    // See if the Upload file button was pressed.
    if(isset($_POST['submit'])) {
        // See if there is a file waiting to be uploaded
        if(!empty($_FILES['upload-file']['name'])) {

            // Check for errors
            if(!$_FILES['upload-file']['error']) {
                // Renamed the file
                $renamedFile = strtolower($_FILES['upload-file']['tmp_name']);

                // Get the file extension
                $fileInfo = pathinfo($_FILES['upload-file']['name']);

                // Now vaidate it
                if (!in_array($fileInfo['extension'], $extensions)) {
                    $isValid = false;
                    echo "This file extension is not allowed";
                }

                // Validate that the file is not bigger than 1MB
                if($_FILES['upload-file']['size'] > $maxFileSize) {
                    $isValid = false;
                    echo "Your file size is to large. The file should not be bigger than 1MB";
                }

                // If the file has passed all tests
                if($isValid)
                {
                    // Move it to where we want it to be
                    move_uploaded_file($_FILES['upload-file']['tmp_name'], 'uploads/'.$renamedFile);
                    echo 'File was successfully uploaded!';
                }
            }
            // If there is an error show it
            else {
                echo 'There was an error file trying to upload the file:  '.$_FILES['upload-file']['error'];
            }
        }
    }

Ответ 2

1. Если вы хотите загрузить в каталог public_html/images/

$destination_path = "public_html/images/"; 
$result=ftp_put($connect, $destination_path . 'myFile.php', FTP_ASCII);

2.

<form method="POST" action="" enctype="multipart/form-data">
    <input type="file" name="myFile">
    <input type="submit" name="submit" value="Submit">
</form>
<?php
if ($_POST['submit']) {
    $result=ftp_put($connect, $_FILES['myFile']['name'], FTP_ASCII);
}
?>
  1. Это не безопасно и очень опасно. Вы должны проверить расширение загруженных файлов.