FTP文件上传成功,但服务器上没有显示


FTP file upload successefully but not showing on server

只是一个简单的介绍/背景信息:

这可以看作是我昨天的问题的第二部分,@Fred-ii非常有帮助。我已经设法纠正了文件路径错误等。

My Problem

如上所述,我成功地将文件上传到服务器(或至少获得成功消息),但当我检查文件夹中的文件时,它不在那里…?事实上,我已经为上传的文件仔细梳理了整个服务器,但没有看到上传的文件。

所有文件都有适当的权限,除了文件权限之外,还有什么会导致这个问题吗?

也许有些东西我必须改变php.ini…但又一次,我不会收到上传成功的消息…?

过去有人发生过这种事吗?

$file_upload="true";
$file_up_size=$_FILES['file_up']['size'];
echo $_FILES['file_up']['name'];
if ($_FILES['file_up']['size']>250000){
    $msg=$msg."Your uploaded file size is more than 250KB
 so please reduce the file size and then upload.<BR>";
$file_upload="false";
}
if (!($_FILES['file_up']['type'] =="image/jpeg" OR $_FILES['file_up']['type'] =="image/gif"))
{
    $msg=$msg."Your uploaded file must be of JPG or GIF. Other file types are not allowed<BR>";
$file_upload="false";
}
$file_name=$_FILES['file_up']['name'];
if($file_upload=="true"){
$ftp_server = "xxxxxxx";
$ftp_conn = ftp_connect($ftp_server) or die("Could not connect to $ftp_server");
$ftp_username = "xxxxxx";
$ftp_userpass = "xxxxxx";
$login = ftp_login($ftp_conn, $ftp_username, $ftp_userpass);
if($login){
    echo '<h1>CONNECTED TO FTP</h1>';
$file = $file_name;
// upload file
if (ftp_put($ftp_conn, $file, 'img/userPics/', FTP_BINARY)) 
  {
  echo "Successfully uploaded $file.";
  }
else
  {
  echo "Error uploading $file.";
  }
}//if file upload == true
}//if result
// close connection
ftp_close($ftp_conn);   

上传一个文件或多个文件时,首先要做的一件事是检查上传错误。

// Check $_FILES['file_up']['error'] value.
$file_upload=true;
switch ($_FILES['file_up'']['error']) {
    case UPLOAD_ERR_INI_SIZE:
        echo 'The uploaded file exceeds the upload_max_filesize directive in php.ini.';
        $file_upload=false;
        break;
    case UPLOAD_ERR_FORM_SIZE:
        echo 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.';
        $file_upload=false;
        break;
    case UPLOAD_ERR_PARTIAL
        echo 'The uploaded file was only partially uploaded.';
        $file_upload=false;
        break;
    case UPLOAD_ERR_NO_FILE:
        echo 'No file was uploaded.';
        $file_upload=false;
        break;
    case UPLOAD_ERR_NO_TMP_DIR:
        echo 'Missing a temporary folder.';
        $file_upload=false;
        break;
    case UPLOAD_ERR_CANT_WRITE:
        echo 'Failed to write file to disk.';
        $file_upload=false;
        break;
    case UPLOAD_ERR_EXTENSION:
        echo 'A PHP extension stopped the file upload.';
        $file_upload=false;
        break;
}
if ( ! $file_upload ) {
    // no file so do whatever is appropriate on upload fail
    exit;
}
// then the rest of your code

还注意到我将$file_upload="false";更改为$file_upload=false;。使用真实的布尔值=true=false而不是字符串要好得多,然后您可以简单地使用if ( $file_upload )询问它是true, if ( ! $file_upload )询问它是false

希望这能找出上传过程中到底是哪里出了问题。

现在来看代码中的其他错误!

最明显的是,您正在获取用户从$file_name=$_FILES['file_up']['name'];上传的文件的文件名,但这只是名称,而不是上传文件实际存在的位置。

PHP的上传过程是一个两阶段的过程,浏览器发送文件,PHP将其存储在临时文件中。然后你的代码运行,你可以验证和检查大小和文件类型等。然后,应该使用move_file_upload()

将临时文件移动到文件系统上的永久文件。

现在,由于您实际上没有将此文件存储在您的系统上,您可能会忘记这一步,但这意味着您FTP到另一个服务器的文件应该从$_FILES['file_up']['tmp'];

发送。

改变这一行

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

$file_name=$_FILES['file_up']['tmp'];

,然后至少你将通过你的FTP连接发送一个真正的文件。