PHP将文件上传到远程服务器

时间:2017-05-16 08:22:44

标签: php

我完全是这一切的新手...... 我创建了一个社交网络项目,其中有一个模块允许用户上传照片.. 我在我的大学服务器上托管了这个项目

我使用bitvise客户端使用我的服务器凭据访问该服务器。

我的问题是我不知道如何为远程服务器设置上传机制...在我的localhost中我只是使用

  

move_uploaded_file($ _ FILES ['文件'] [' tmp_name的值'],$ TARGET_FILE);

功能,但我不知道如何为远程服务器执行此操作...

我通过查看一些教程尝试了FTP,但这对我没用。 在我的项目结构中有一个目录

  

users / user_id(所有用户的差异)/照片

这里我想放置上传的文件.... 正确的描述与示例和正确的功能可能对我非常有帮助....谢谢

修改  以下是我的代码。

Photos.php

<form class="input-group-btn" method="post" action="editPhotos.php"enctype="multipart/form-data" id="myForm">
    <input type="file" name="file" id="imgInp">
    <button type="submit" class="btn btn-primary" name="form-submit">Done</button>
</form>

editPhotos.php

if( isset($_POST['form-submit']) ){
    $target_file = "users/".$email."/pictures/Photos/" . basename($_FILES["file"]["name"]);
    $imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
    move_uploaded_file($_FILES['file']['tmp_name'],$target_file);
    $img =str_replace(" ", "",basename($_FILES["file"]["name"]));

    rename($target_file, "users/".$email."/pictures/Photos/".$img);
    header('Refresh: 1; url=Photos.php?user='.$email);
}

2 个答案:

答案 0 :(得分:0)

使用uploads文件夹的相对路径。例如,如果您的上传文件夹位于当前文件夹之外。然后

$PATH = '/absolute/example/path/to/uploads';//from config file    
$target_file = "$PATH/file_name";
move_uploaded_file($_FILES['file']['tmp_name'],$target_file);

以上代码可以在本地和远程服务器上运行。

其他检查如下:

  1. 在服务器上载文件时检查Spring Security Reference
  2. 要启用错误处理,请使用上传逻辑中的以下代码:

    ini_set('display_errors', 1);
    error_reporting(E_ALL);
    
    1. 另一个重要提示是上传文件夹errors,否则文件上传无效。

答案 1 :(得分:0)

小教程如何上传文件。

当然,您需要在encryption中找到正确的form和文件类型(省略其他字段,以清除示例):

form.html

< form action="upload.php" method="post" enctype="multipart/form-data">< /form>
< input name="test" type=file>

upload.php的

$_FILES中,您拥有已上传文件的所有数据。在给定的示例中,我们有一个名为test的字段。

建议,要始终先检查错误$_FILES['test']['error'] - 您可以在here中找到的值。

如果这是正确的,那么准备上传路径。一些建议:

  • 请记住,如果您使用原始文件名($_FILES['test']['name']),那么用户上传第二个文件,同名,您将需要覆盖文件或忽略上传。另一方面,是将数据保存到数据库并从中生成临时名称。
  • 目标路径(target_file) - 无论上传文件夹是否在同一目录中,您都应该始终使用全局路径,这是一种很好的做法。您可以使用DIR
  • 不要在路径数据中使用,比如电子邮件 - 您是否有项目,并希望有机会在配置中更改电子邮件,您将使用文件做什么?最好将用户保存到数据库并使用他的ID作为密钥。

如果你有路径,那么你只需要使用move_uploaded_file,但记得检查结果,因为它并不总是会返回true。如果您没有目标文件夹的权限,则可能会出错(您需要对此进行调试)。

我看到你,首先上传文件,然后重命名(然后你应该检查,如果重命名是成功的话)。如果没有必要,请不要扩展此过程。上传最终路径和名称的文件。

代码示例(我发出响声)

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);

    $fileName = basename($_FILES["file"]["name"]);
    $fileName = str_replace(" ", "", $fileName);

    $target_file = sprintf(__DIR__ . "/users/%s/pictures/Photos/%s", $email, $fileName);

    if (move_uploaded_file($_FILES['file']['tmp_name'], $target_file)) {
        // File was uploaded
        header('Refresh: 1; url=Photos.php?user=' . $email);

    } else {
        // File was not uploaded;
        throw new \Exception('File was not uploaded. Check warnings.');
    }
}
  • 使用其他方法检查,如果是POST
  • 使用方法sprintf,以获得更好的代码质量
  • 检查move_uploaded_file
  • 的效果
  • 使用目标文件的全局路径