【问题标题】:Uploading a file from local to server through FTP using PHP使用PHP通过FTP将文件从本地上传到服务器
【发布时间】:2015-05-14 05:17:06
【问题描述】:

我想从本地上传文件到服务器。我尝试了以下代码,但它给出了一些错误。请帮我解决

<?php 
$server="115.120.147.261";
$ftp_user_name="root";
$ftp_user_pass="3424dd";
$dest="/home/root/web/Price-War/";
$source="/home/root/sample.txt";
$connection = ftp_connect($server);
if($connection)
{
echo "Connection Established";
}
$login = ftp_login($connection, $ftp_user_name, $ftp_user_pass);

if (!$connection || !$login) { die('Connection attempt failed!'); }

$upload = ftp_put($connection, $dest, $source, FTP_ASCII);

if (!$upload) { echo 'FTP upload failed!'; }

ftp_close($connection);
?>

它抛出以下错误。

Connection Established
PHP Warning:  ftp_put(): Could not create file. in /home/root/Desktop/upload.php on line 16

【问题讨论】:

  • 检查您的文件夹权限是否已设置为 777?
  • 我已授予文件权限。但我仍然遇到同样的错误。

标签: php file-upload upload ftp


【解决方案1】:

这看起来像您(或者更确切地说是您的脚本)没有创建文件所需的访问权限。检查该目录是否归执行脚本的用户所有。您可能需要使用chmod 命令为上传目录(关于您的脚本)授予特定权限。

很多人会告诉你使用chmod 777 directorynamechmod 755 directoryname 来允许脚本创建和编辑文件。但是,这可能会带来严重的安全问题,因为它允许所有用户访问和编辑目录中的文件。

【讨论】:

  • 脚本只需要读取权限,但必须有写入ftp服务器的权限。
  • 我已授予文件权限。但我仍然遇到同样的错误。
  • ftp_put() 函数将正确/上传到服务器@doev
  • 检查我的答案,看看是否有帮助。
【解决方案2】:

我也在使用 PHP 和 FTP,除了我正在下载而不是上传。我的本地路径需要是文件的绝对路径(完整路径),而我的 FTP 路径需要是相对路径。有点像这样:

$ftp_path = "/foldername/filename.txt";
$local_path = "C:\wamp\www\my_website\files\file_to_upload.txt"

像这样获取你的本地路径:

$path_to_root   = dirname(__FILE__);
$local_folder   = "\my_website\files\";
$local_full_path= $path_to_root.$local_folder."file_to_upload.txt";

我还使用 ftp_nb_get() 而不是 ftp_get(),因此我可以在下载时运行其他代码(例如检查部分下载文件的文件大小)。在这里查看我的代码:

PHP ftp_nb_get get local partial file size while downloading

【讨论】:

    【解决方案3】:

    将此 LOC 放在 ftp_put() 之上。 您可能必须将上传模式指定为被动才能上传文件。

    ftp_pasv($connection, true);
    

    【讨论】:

    • 好吧,我们想弄清楚 3 件事。 1. 您的目标路径, 2. 上传的文件名。 3. 你的文件来自哪里? ($_FILES?)
    • 目的地是 $dest 。文件名是 sample.txt 。文件来源是/home/root/
    • 您可以访问 sample.txt 吗?因为它应该保存在您的 Web 服务器的根目录中。如果您不能确定,请使用 file_exists($source) 进行检查。如果返回 false,则表示找不到源。如果是,请查看是否可以访问 FTP 以从根目录读取文件?如果不是,则 FTP 没有获得足够的权限。
    • 函数返回真。我不认为它与权限有关,因为如果它权限问题函数将不会返回 true。如果我错了,请纠正我
    【解决方案4】:

    $dest="/home/root/web/Price-War/";

    你需要设置一个文件名。

    $dest="/home/root/web/Price-War/sample.txt"

    【讨论】:

    • 但 dest 变量必须将文件写入该位置。所以我希望不需要指定文件名。如果我错了,请纠正我
    • 你能用 ftp 客户端加载到那个目的地吗?
    • 我使用 filezilla 上传。我可以上传到那个目的地
    • 抱歉,不知道。我在我的脚本中使用了相同的代码,它工作正常......随着 $dest 的变化。
    猜你喜欢
    • 2014-03-22
    • 1970-01-01
    • 1970-01-01
    • 2019-02-11
    • 2017-04-30
    • 1970-01-01
    • 1970-01-01
    • 2016-03-31
    • 2011-04-06
    相关资源
    最近更新 更多