ホームページ > バックエンド開発 > PHPチュートリアル > PHP は CURL を使用してダウンロード ファイルをアップロードします。

PHP は CURL を使用してダウンロード ファイルをアップロードします。

WBOY
リリース: 2016-06-23 13:20:30
オリジナル
1061 人が閲覧しました

CURL ダウンロードファイル

/** * @param string $img_url 下载文件地址 * @param string $save_path 下载文件保存目录 * @param string $filename 下载文件保存名称 * @return bool */function curlDownFile($img_url, $save_path = '', $filename = '') {    if (trim($img_url) == '') {        return false;    }    if (trim($save_path) == '') {        $save_path = './';    }    //创建保存目录    if (!file_exists($save_path) && !mkdir($save_path, 0777, true)) {        return false;    }    if (trim($filename) == '') {        $img_ext = strrchr($img_url, '.');        $img_exts = array('.gif', '.jpg', '.png');        if (!in_array($img_ext, $img_exts)) {            return false;        }        $filename = time() . $img_ext;    }    // curl下载文件    $ch = curl_init();    $timeout = 5;    curl_setopt($ch, CURLOPT_URL, $img_url);    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);    $img = curl_exec($ch);    curl_close($ch);    // 保存文件到制定路径    file_put_contents($filename, $img);    unset($img, $url);    return true;}// 执行函数之后,会在当前文件的同一目录下生成下载好的图片curlDownFile('http://mimg.127.net/logo/163logo.gif');
ログイン後にコピー

CURL アップロードファイル

1. PHP5.5 より前のファイルをアップロードするには CURL を使用します

最初の書き方、PHP バージョン要件 <5.5$filename はファイルパスです、必須です
filename=test.txt は、受信側が受信したファイル名です。それが空の場合、ファイル名ファイル パスのベース名部分が取得されます。
type=text/plain ドキュメント タイプは空でもかまいません

/** * @param string $target_url 上传目标地址 * @param string $filename 上传文件路径 * @param string $form_name 表单名称 */function curlUploadFile($target_url, $filename, $form_name) {    $post_data = array(        $form_name => "@$filename;filename=test.txt;type=text/plain",    );        $ch = curl_init();    curl_setopt($ch, CURLOPT_URL, $target_url);    curl_setopt($ch, CURLOPT_POST, 1);    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);        $result = curl_exec($ch);    curl_close($ch);}$target_url = 'http://www.codean.net/notFound/test.php';$filename = realpath("C:/Users/HelloWorld/Desktop/Images/1.jpg");$form_name = 'file';// 接收端使用$_FILES接受curlUploadFile($target_url, $filename, $form_name);
ログイン後にコピー

2.PHP5.5 次に、CURLを使用してファイルをアップロードします

2番目の記述方法(推奨)、PHPバージョン>= 5.5filename アップロードする必要があるファイルには、絶対パスを使用することをお勧めします
mimetype : デフォルトは application/octet-stream で、空白のままにしておきます
postname: 受信側の $_FILES 配列内のファイル名、デフォルトはファイル名です

/** * @param string $target_url 上传目标地址 * @param string $filename 上传文件路径 * @param string $form_name 表单名称 */function curlUploadFile($target_url, $filename, $form_name) {    $upload_file = new CURLFile($filename);    $post_data = array(        $form_name => $upload_file    );    $ch = curl_init();    curl_setopt($ch, CURLOPT_URL, $target_url);    curl_setopt($ch, CURLOPT_POST, 1);    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);    $result = curl_exec($ch);    curl_close($ch);}$target_url = 'http://www.codean.net/notFound/test.php';$filename = realpath("C:/Users/HelloWorld/Desktop/Images/1.jpg");$form_name = 'file';// 接收端使用$_FILES接受curlUploadFile($target_url, $filename, $form_name);
ログイン後にコピー

3.PHP はファイルをアップロードするためにファイルストリームを送信します

/* * 第三种写法,使用PHP流发送 * @param string $target_url 上传目标地址 */function curlUploadFile($target_url) {    $fh = fopen('php://temp', 'rw+');    $string = 'Hello World';    fwrite($fh, $string);    rewind($fh);    $ch =  curl_init();    curl_setopt($ch, CURLOPT_URL, $target_url);    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);    curl_setopt($ch, CURLOPT_PUT, true);    curl_setopt($ch, CURLOPT_INFILE, $fh);    curl_setopt($ch, CURLOPT_INFILESIZE, strlen($string));    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);    $result = curl_exec($ch);    curl_close($ch);}$target_url = 'http://www.codean.net/notFound/test.php';curlUploadFile($target_url);// 接收端取出流文件并保存$putdata = fopen('php://input', 'r');$fp = fopen('test.txt', 'w');while ($data = fread($putdata, 1024)) {    fwrite($fp, $data);}fclose($fp);fclose($putdata);
ログイン後にコピー

4.HTTP メッセージ アップロード ファイル

/** * @param string $target_url 文件上传地址 */function curlUploadFile($target_url) {    // 生成分隔符    $delimiter = '-------------' . uniqid();    // 需要上传的文件数组    $fileFields = array(        'file' => array(            'name' => 'test.png',            'type' => 'text/html',            'content' => 'This is my file content.'        ),    );    // 后端接受的$_POST的数组值    $postFields = array(        'file' => 'file',    );    $data = '';    // 先将post的普通数据生成主体字符串    foreach ($postFields as $name => $content) {        $data .= "--" . $delimiter . "\r\n";        $data .= 'Content-Disposition: form-data; name="' . $name . '"';        $data .= "\r\n\r\n" . $content . "\r\n";    }    // 将上传的文件生成主体字符串    foreach ($fileFields as $name => $file) {        $data .= "--" . $delimiter . "\r\n";        $data .= 'Content-Disposition: form-data; name="' . $name . '"; filename="' . $file['name'] . "\" \r\n";        $data .= 'Content-Type: ' . $file['type'] . "\r\n\r\n";        $data .= $file['content'] . "\r\n";    }    // 主体结束的分隔符    $data .= "--" . $delimiter . "--";    // curl上传文件    $handle = curl_init($target_url);    curl_setopt($handle, CURLOPT_POST, true);    curl_setopt($handle, CURLOPT_HTTPHEADER, array(        'Content-Type: multipart/form-data; boundary=' . $delimiter,        'Content-Length: ' . strlen($data))    );    curl_setopt($handle, CURLOPT_RETURNTRANSFER, 1);    curl_setopt($handle, CURLOPT_POSTFIELDS, $data);    $result = curl_exec($handle);    curl_close($handle);}
ログイン後にコピー

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート