记一次文件传输 :curl 上传& php 接收

时间:2022-10-19 18:19:10

今晚实验室的同学有一个需求,需要拷一下虚拟机A 中的文件: /usr/lib/i386-linux-gnu/libc.a

本来以为分分钟可以搞定的,结果折腾了一个多小时。在此记录一下吧。

这个虚拟机是别人提供的,给了个vmdx磁盘文件,创建了之后发现是read-only system,不知道是怎么做到的。因此创建文件什么的是不可能了。修改配置文件、安装软件也不行了。

记一次文件传输 :curl 上传& php 接收

虚拟机开了22端口,那么通过ssh传输文件吧。然而ssh登陆不上该虚拟机,why?因为想让root用户登陆得修改配置文件...

记一次文件传输 :curl 上传& php 接收

记一次文件传输 :curl 上传& php 接收

万幸的是,该虚拟机是联网的。那么curl传一下吧。

curl -F "file=@/usr/lib/i386-linux-gnu/libc.a" server_ip

接受脚本:

<?php


$inipath = php_ini_loaded_file();

if ($inipath) {
    echo 'Loaded php.ini: ' . $inipath;
} else {
   echo 'A php.ini file is not loaded';
}

if (isset($_FILES["file"]["name"])) {
	echo "success\n";
    $name = $_FILES["file"]["name"];
    $tmp_name = $_FILES['file']['tmp_name'];
    $error = $_FILES['file']['error'];

    echo "name is \n";
    echo $name;
    echo "\necho done";

    echo "\nname is \n";
    echo $tmp_name;
    echo "\necho done";


    if (!empty($name)) {
        $location = 'D:/.../WWW/';

        if  (move_uploaded_file($tmp_name, $location.$name)){
            echo 'Uploaded';
        }

    } else {
        echo 'please choose a file';
    }
}else{
	echo "error";
}
?>

起初并没有接收到到文件,但是wireshark抓包发现文件确实已经传输了。定位到php脚本发现$tmp_name为空,原因在于这个文件太大了,3.6M,php默认配置最大上传大小是2M,因此修改php.ini解决:

; Maximum allowed size for uploaded files.
upload_max_filesize = 8M 

; Must be greater than or equal to upload_max_filesize
post_max_size = 8M 
php脚本是网上搜的,好久不搞web了,真是太菜了。