Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
下载一个文件并用PHP和AJAX上传_Php_Ajax_Jquery_Ftp_Download - Fatal编程技术网

下载一个文件并用PHP和AJAX上传

下载一个文件并用PHP和AJAX上传,php,ajax,jquery,ftp,download,Php,Ajax,Jquery,Ftp,Download,我正在开发一个web应用程序,它使用jQueryAjax和PHP将一些数据上传到我的数据库中 要提交的表单的一个字段是图像的URL(WEB的任何地址)。此图像应下载到我的FTP服务器,然后将其新地址插入数据库 如何从任何URL下载图像并将其上载到FTP服务器 表格: <form id="form-id" method="post" action="insert.php" charset=utf-8"> <input type="text" name="title" id

我正在开发一个web应用程序,它使用jQueryAjax和PHP将一些数据上传到我的数据库中

要提交的表单的一个字段是图像的URL(WEB的任何地址)。此图像应下载到我的FTP服务器,然后将其新地址插入数据库

如何从任何URL下载图像并将其上载到FTP服务器

表格:

<form id="form-id" method="post" action="insert.php" charset=utf-8">
    <input type="text" name="title" id="title">
    <input type="text" name="image-url" id="image-url">
    <input type="submit" name="submit" id="submit">
</form>
insert.php

$title = $_REQUEST['title'];
$image = $_REQUEST['image'];

$imageInMyServer = downloadImageFromURLAndUploadFTP($image);
function downloadImageFromURLAndUploadFTP($image) {
    //that is what I want to know how to do.
}

//sql query with $title and $imageInMyServer
<?php
if(isset($_POST['image']) && isset($_POST['title'])){
    if(substr($_POST['image'],0,4)=='http'){
        $image = curlgetimage($_POST['image']);
        $info = pathinfo($_POST['image']);
        if(isset($info['extension']) && ($info['extension']=='gif' || $info['extension']=='png' || $info['extension']=='jpg')){
            $path='./temp/'.md5($_POST['image']).'.'.$info['extension'];
            file_put_contents($path,$image);
            if(ftp_put_image($path)===true){
                //Do your database stuff, remember to escape..
                unlink($path);
                echo 'Success';
            }else{
                echo 'ftp-fail';
            }
        }else{
            echo'File type not allowed';
        }
    }else{
        echo'Must start with http://';
    }
}else{
    header('Location: http://www.example.com/');
}


function ftp_put_image($file){
    if(!file_exists($file)){return false;}
    $fp = fopen($file, 'r');
    $conn_id = ftp_connect('ftp.yourhost.com'); //change
    $login_result = ftp_login($conn_id,'username','password'); //change
    $return=(ftp_fput($conn_id, $file, $fp, FTP_BINARY))?true:false;
    ftp_close($conn_id);
    fclose($fp);
    return $return;
}

function curlgetimage($url) {
    $header[] = 'Accept: image/gif, image/x-bitmap, image/jpeg, image/pjpeg';
    $header[] = 'Connection: Keep-Alive';
    $header[] = 'Content-type: application/x-www-form-urlencoded;charset=UTF-8';
    $curl = curl_init($url);
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_USERAGENT, 'YourSpiderBot/0.01 (Bla Bla Robot; http://www.example.com; spider@example.com)'); //change
    curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
    curl_setopt($curl, CURLOPT_HEADER, 0);
    curl_setopt($curl, CURLOPT_REFERER, $url);
    curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate');
    curl_setopt($curl, CURLOPT_AUTOREFERER, true);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_TIMEOUT, 60);
    $return = curl_exec($curl);
    curl_close($curl);
    return $return;
}
?>
注意事项:

<form id="form-id" method="post" action="insert.php" charset=utf-8">
    <input type="text" name="title" id="title">
    <input type="text" name="image-url" id="image-url">
    <input type="submit" name="submit" id="submit">
</form>
  • 我要下载的文件不在我的服务器上。它在互联网的其他地方,我需要下载到我的FTP服务器
  • 不可以。我无法在SQL查询中使用第一个外部URL

这是一个很好的例子。至于下载该文件,如果您在linux上,可以使用
wget
(使用
exec()
函数)

从我提供给您的链接中窃取一段代码片段,下面是您的函数的外观:

function downloadImageFromURLAndUploadFTP($image) {
    // in your case it would be some img extension like .jpg, .gif, or .png
    // you can check the extension of $image and use that if you want.
    $newFile = '/path/to/newfile.ext';
    exec('wget -q ' . $image . ' -0 ' . $newFile);

    if (file_exists($newFile)) {
        // set up connection and login
        $connect = ftp_connect($ftpServer); 
        $login   = ftp_login($connect, $ftpUser, $ftpPass); 

        // check connection
        if (!$connect || !$login) { 
            die('FTP connection has failed!'); 
        } else {
            echo "Connected to {$ftpServer}, for user {$ftpUser}";
        }

        // upload the file
        $fileNameOnFTPServer = 'whateverYouWantToNameIt.ext'; // arbitrary extension
        $upload = ftp_put($connect, $fileNameOnFTPServer, $newFile, FTP_BINARY); 

        // check upload status
        if (!$upload) { 
            echo "FTP upload has failed!";
        } else {
            echo "Uploaded {$image} to {$ftpServer} as {$fileNameOnFTPServer}";
        }

        ftp_close($connect);
    }
}
注意:当路径以
/
开头时,有时
文件存在()。例如,
/path/to/file
可能存在,但
file_exists()
会认为它不存在,除非删除开头“/”。一种方法是这样检查:

file_exists(substr($newFile, 1))

祝你好运

这是一个关于这个问题的很好的例子。至于下载该文件,如果您在linux上,可以使用
wget
(使用
exec()
函数)

从我提供给您的链接中窃取一段代码片段,下面是您的函数的外观:

function downloadImageFromURLAndUploadFTP($image) {
    // in your case it would be some img extension like .jpg, .gif, or .png
    // you can check the extension of $image and use that if you want.
    $newFile = '/path/to/newfile.ext';
    exec('wget -q ' . $image . ' -0 ' . $newFile);

    if (file_exists($newFile)) {
        // set up connection and login
        $connect = ftp_connect($ftpServer); 
        $login   = ftp_login($connect, $ftpUser, $ftpPass); 

        // check connection
        if (!$connect || !$login) { 
            die('FTP connection has failed!'); 
        } else {
            echo "Connected to {$ftpServer}, for user {$ftpUser}";
        }

        // upload the file
        $fileNameOnFTPServer = 'whateverYouWantToNameIt.ext'; // arbitrary extension
        $upload = ftp_put($connect, $fileNameOnFTPServer, $newFile, FTP_BINARY); 

        // check upload status
        if (!$upload) { 
            echo "FTP upload has failed!";
        } else {
            echo "Uploaded {$image} to {$ftpServer} as {$fileNameOnFTPServer}";
        }

        ftp_close($connect);
    }
}
注意:当路径以
/
开头时,有时
文件存在()。例如,
/path/to/file
可能存在,但
file_exists()
会认为它不存在,除非删除开头“/”。一种方法是这样检查:

file_exists(substr($newFile, 1))

祝你好运

如果您没有exec权限,另一种解决方案是使用curl来抓取图像,或者您可以使用
file\u get\u contents()
,方法有很多,这只是个人的偏好

我把你的剧本拼凑起来,我相信你能改进它

insert.php

$title = $_REQUEST['title'];
$image = $_REQUEST['image'];

$imageInMyServer = downloadImageFromURLAndUploadFTP($image);
function downloadImageFromURLAndUploadFTP($image) {
    //that is what I want to know how to do.
}

//sql query with $title and $imageInMyServer
<?php
if(isset($_POST['image']) && isset($_POST['title'])){
    if(substr($_POST['image'],0,4)=='http'){
        $image = curlgetimage($_POST['image']);
        $info = pathinfo($_POST['image']);
        if(isset($info['extension']) && ($info['extension']=='gif' || $info['extension']=='png' || $info['extension']=='jpg')){
            $path='./temp/'.md5($_POST['image']).'.'.$info['extension'];
            file_put_contents($path,$image);
            if(ftp_put_image($path)===true){
                //Do your database stuff, remember to escape..
                unlink($path);
                echo 'Success';
            }else{
                echo 'ftp-fail';
            }
        }else{
            echo'File type not allowed';
        }
    }else{
        echo'Must start with http://';
    }
}else{
    header('Location: http://www.example.com/');
}


function ftp_put_image($file){
    if(!file_exists($file)){return false;}
    $fp = fopen($file, 'r');
    $conn_id = ftp_connect('ftp.yourhost.com'); //change
    $login_result = ftp_login($conn_id,'username','password'); //change
    $return=(ftp_fput($conn_id, $file, $fp, FTP_BINARY))?true:false;
    ftp_close($conn_id);
    fclose($fp);
    return $return;
}

function curlgetimage($url) {
    $header[] = 'Accept: image/gif, image/x-bitmap, image/jpeg, image/pjpeg';
    $header[] = 'Connection: Keep-Alive';
    $header[] = 'Content-type: application/x-www-form-urlencoded;charset=UTF-8';
    $curl = curl_init($url);
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_USERAGENT, 'YourSpiderBot/0.01 (Bla Bla Robot; http://www.example.com; spider@example.com)'); //change
    curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
    curl_setopt($curl, CURLOPT_HEADER, 0);
    curl_setopt($curl, CURLOPT_REFERER, $url);
    curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate');
    curl_setopt($curl, CURLOPT_AUTOREFERER, true);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_TIMEOUT, 60);
    $return = curl_exec($curl);
    curl_close($curl);
    return $return;
}
?>

如果您没有exec权限,另一种解决方案是使用curl来抓取图像,或者您可以使用
file\u get\u contents()
,有很多方法,这只是个人偏好

我把你的剧本拼凑起来,我相信你能改进它

insert.php

$title = $_REQUEST['title'];
$image = $_REQUEST['image'];

$imageInMyServer = downloadImageFromURLAndUploadFTP($image);
function downloadImageFromURLAndUploadFTP($image) {
    //that is what I want to know how to do.
}

//sql query with $title and $imageInMyServer
<?php
if(isset($_POST['image']) && isset($_POST['title'])){
    if(substr($_POST['image'],0,4)=='http'){
        $image = curlgetimage($_POST['image']);
        $info = pathinfo($_POST['image']);
        if(isset($info['extension']) && ($info['extension']=='gif' || $info['extension']=='png' || $info['extension']=='jpg')){
            $path='./temp/'.md5($_POST['image']).'.'.$info['extension'];
            file_put_contents($path,$image);
            if(ftp_put_image($path)===true){
                //Do your database stuff, remember to escape..
                unlink($path);
                echo 'Success';
            }else{
                echo 'ftp-fail';
            }
        }else{
            echo'File type not allowed';
        }
    }else{
        echo'Must start with http://';
    }
}else{
    header('Location: http://www.example.com/');
}


function ftp_put_image($file){
    if(!file_exists($file)){return false;}
    $fp = fopen($file, 'r');
    $conn_id = ftp_connect('ftp.yourhost.com'); //change
    $login_result = ftp_login($conn_id,'username','password'); //change
    $return=(ftp_fput($conn_id, $file, $fp, FTP_BINARY))?true:false;
    ftp_close($conn_id);
    fclose($fp);
    return $return;
}

function curlgetimage($url) {
    $header[] = 'Accept: image/gif, image/x-bitmap, image/jpeg, image/pjpeg';
    $header[] = 'Connection: Keep-Alive';
    $header[] = 'Content-type: application/x-www-form-urlencoded;charset=UTF-8';
    $curl = curl_init($url);
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_USERAGENT, 'YourSpiderBot/0.01 (Bla Bla Robot; http://www.example.com; spider@example.com)'); //change
    curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
    curl_setopt($curl, CURLOPT_HEADER, 0);
    curl_setopt($curl, CURLOPT_REFERER, $url);
    curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate');
    curl_setopt($curl, CURLOPT_AUTOREFERER, true);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_TIMEOUT, 60);
    $return = curl_exec($curl);
    curl_close($curl);
    return $return;
}
?>


curl_setopt($curl,CURLOPT_USERAGENT,'yourspederbot/0.01(blabla-Bla-Robot;);spider@example.com)'); ? 任何使用我的域或我必须使用特定值的内容?该文件从未被下载。。。因此,我得到的FTP错误文件不存在。我不知道它是不是由curlgetimage($url)下载的,还是不是由file\u put\u contents($path,$image)@rlc放置的。首先,你可以将任何东西作为用户代理,礼貌的做法是将自己显示为一个破坏者/机器人,但你也可以伪装成一个普通的浏览器。我确实用一个表单而不是“header('Location:);”,测试了这个脚本也许你的表单/jquery是问题所在。不确定,也检查一下你的服务器上是否启用了curl,我知道默认情况下xammp没有启用(只需要取消注释一行),但是99%的Web主机都启用了。我应该在curl_setopt($curl,CURLOPT_USERAGENT,'YourSpiderBot/0.01(Bla Bla Robot;);spider@example.com)'); ? 任何使用我的域或我必须使用特定值的内容?该文件从未被下载。。。因此,我得到的FTP错误文件不存在。我不知道它是不是由curlgetimage($url)下载的,还是不是由file\u put\u contents($path,$image)@rlc放置的。首先,你可以将任何东西作为用户代理,礼貌的做法是将自己显示为一个破坏者/机器人,但你也可以伪装成一个普通的浏览器。我确实用一个表单而不是“header('Location:);”,测试了这个脚本也许您的表单/jquery是问题所在。不确定,还请检查您的服务器上是否启用了curl,我知道默认情况下xammp没有启用(只需取消注释一行),但99%的webhosts已启用。