You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需FTP的PHP直连IP地址文件上传方案求助

不用FTP,通过IP直接上传文件的可行方案

嘿,当然可以绕过FTP直接通过IP传文件啦!你吐槽FTP认证慢的问题确实戳中了它的痛点,下面给你几个实用的方案,还结合你给出的PHP代码来优化说明:

1. 基于HTTP/HTTPS的PHP文件上传(适配你现有代码)

你手里的PHP代码本身就是通过IP直接上传的绝佳方式——只要你的服务器有公网IP,把这段代码部署好,客户端直接访问服务器IP就能传文件,完全和FTP没关系。

不过你的代码片段有点不完整,我给你补全并优化了一下,兼顾安全性和可用性:

<?php
// 允许的文件扩展名,统一转小写判断更简洁,避免大小写问题
$valid_extensions = array('jpeg', 'jpg', 'png', 'gif', 'pdf', 'xls', 'xlsx', 'doc', 'docx', 'ods');
$upload_dir = './uploads/'; // 上传目录,记得在服务器上创建这个文件夹并给写入权限

// 检查是否有文件上传
if(isset($_FILES['img']) && !empty($_FILES['img']['tmp_name'])){
    // 获取文件扩展名并转小写
    $file_ext = strtolower(pathinfo($_FILES['img']['name'], PATHINFO_EXTENSION));
    
    // 验证扩展名是否合法
    if(in_array($file_ext, $valid_extensions)){
        // 生成唯一文件名,防止同名文件被覆盖
        $new_filename = uniqid('upload_', true) . '.' . $file_ext;
        $upload_path = $upload_dir . $new_filename;
        
        // 把临时文件移动到上传目录
        if(move_uploaded_file($_FILES['img']['tmp_name'], $upload_path)){
            echo "文件上传成功!存储路径:" . $upload_path;
        } else {
            echo "上传失败:服务器没有写入权限,请检查目录权限";
        }
    } else {
        echo "上传失败:不支持该文件类型,允许的类型有:" . implode(', ', $valid_extensions);
    }
} else {
    echo "请先选择要上传的文件";
}
?>

使用步骤:

  • 把这段代码存成upload.php,上传到服务器的Web根目录(比如Apache的htdocs、Nginx的html文件夹)
  • 在服务器上创建uploads文件夹,设置权限为755(Linux下执行chmod 755 uploads/)
  • 客户端打开浏览器访问http://你的服务器IP/upload.php,用HTML表单或者Postman等工具提交名为img的文件字段,就能完成上传

2. 用SCP/RSYNC命令行直接传文件

如果是本地电脑往服务器传文件,不需要PHP的话,SCP或者RSYNC是更高效的选择——它们基于SSH协议,认证速度比FTP快得多,还加密传输更安全:

  • SCP命令(适合单文件快速传输):
scp /你本地的文件路径/文件名 服务器用户名@服务器IP:/服务器上的目标路径/
  • RSYNC命令(适合大文件/增量上传,断点续传):
rsync -avz /你本地的文件路径/文件名 服务器用户名@服务器IP:/服务器上的目标路径/

这俩工具Linux/macOS默认自带,Windows用户可以用Git Bash或者PowerShell 7+来执行。

3. 在PHP代码里用SSH2扩展实现SCP上传

要是你想在PHP程序里直接通过IP(SSH协议)把文件传到另一台服务器,可以用PHP的ssh2扩展:
首先得在服务器上安装这个扩展(比如Ubuntu下执行apt-get install php-ssh2),然后参考下面的代码:

<?php
$server_ip = '目标服务器的IP地址';
$ssh_user = '服务器的SSH用户名';
$ssh_pass = '服务器的SSH密码'; // 更推荐用SSH密钥认证,安全又不用输密码
$local_file = './本地要上传的文件路径/文件名';
$remote_path = '/服务器上的目标存储路径/文件名';

// 建立SSH连接
$connection = ssh2_connect($server_ip, 22);
if(ssh2_auth_password($connection, $ssh_user, $ssh_pass)){
    // 通过SCP上传文件
    if(ssh2_scp_send($connection, $local_file, $remote_path, 0644)){
        echo "文件通过SSH上传成功!";
    } else {
        echo "SSH上传失败,请检查路径和权限";
    }
} else {
    echo "SSH认证失败,请检查用户名和密码";
}
?>

为啥这些方案比FTP靠谱?

  • 认证更快:SSH协议的认证流程比传统FTP简洁,要是用密钥认证的话,连密码都不用输,速度拉满
  • 更安全:FTP是明文传输,这些方案全都是加密传输,不用担心文件内容或者账号密码被窃取
  • 更灵活:HTTP上传适合网页端操作,命令行工具适合批量/自动化传输,PHP扩展则能集成到你的业务代码里

最后提个醒:不管用哪种方案,都要确保服务器防火墙开放对应端口(HTTP用80/443,SSH用22),还要做好权限控制,别给不必要的目录开过高权限哦!

内容的提问来源于stack exchange,提问作者jayson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:53:50