php ОтправкаданныхиспользуяFormDataбезJS

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php ОтправкаданныхиспользуяFormDataбезJS相关的知识,希望对你有一定的参考价值。

<?php

/**
 * Отправка данных используя FormData
 * Class FormDataSender
 * @category Starliner
 * @package  Utils
 * @author   Elovskiy I.V. <elovskigor@gmail.com> <i.elovsky@starliner.ru>
 */
class FormDataSender {

	/**
	 * @param array $fields
	 * @param array $files
	 * @param string|null $boundary
	 *
	 * @return array
	 */
	protected function buildDataFiles($fields, $files, $boundary) {

		$boundary = $boundary ?? uniqid();
		$data = '';
		$eol = "\r\n";

		$delimiter = str_repeat('-', 13) . $boundary;

		foreach ($fields as $name => $content) {
			$data .= "--" . $delimiter . $eol . 'Content-Disposition: form-data; name="' . $name . "\"" . $eol . $eol . $content . $eol;
		}

		//. 'Content-Type: image/png'.$eol
		foreach ($files as $name => $content) {
			$data .= "--" . $delimiter . $eol . 'Content-Disposition: form-data; name="' . $name . '"; filename="' . $name . '"' . $eol . 'Content-Transfer-Encoding: binary' . $eol;
			$data .= $eol;
			$data .= $content . $eol;
		}

		$data .= "--" . $delimiter . "--" . $eol;

		return array('post_data' => $data, 'delimiter' => $delimiter);
	}

	/**
	 * @param string $url
	 * @param array $fields Массив данных для отправки
	 * @param array $filenames Список файлов array('/tmp/1.jpg', '/tmp/2.png')
	 * @param string|null $boundary Разделитель
	 *
	 * @return array
	 */
	public function send($url, $fields, $filenames = array(), $boundary = null) {

		$files = array();
		foreach ($filenames as $f){
			$files[$f] = file_get_contents($f);
		}

		$build = $this->buildDataFiles($fields, $files, $boundary);

		$curl = curl_init();
		curl_setopt_array($curl, array(
			CURLOPT_URL => $url,
			CURLOPT_RETURNTRANSFER => 1,
			CURLOPT_MAXREDIRS => 10,
			CURLOPT_TIMEOUT => 30,
			//CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
			CURLOPT_CUSTOMREQUEST => "POST",
			CURLOPT_POST => 1,
			CURLOPT_POSTFIELDS => $build['post_data'],
			CURLOPT_HTTPHEADER => array(
				//"Authorization: Bearer $TOKEN",
				"Content-Type: multipart/form-data; boundary=" . $build['delimiter'],
				"Content-Length: " . strlen($build['post_data'])
			),
		));

		$response = curl_exec($curl);
		$info = curl_getinfo($curl);
		$err = curl_error($curl);

		curl_close($curl);

		return array('response' => $response, 'info' => $info, 'err' => $err);
	}

}

以上是关于php ОтправкаданныхиспользуяFormDataбезJS的主要内容,如果未能解决你的问题,请参考以下文章

php ОтправкаданныхиспользуяFormDataбезJS

sh Добавитьправоназаписьдлягруппыврепозиторий,которыйнаходитсянасервере

Erlangе демо

比特币不能购买特斯拉了!今日比特币狂跌背后的原因……

sh Cоздатьtar-архивпроектаизаписатьеговфайл~/ prj.tar。 Внутринегофайлыбудутнаходитсявпапкеproj-1.2.3

php Хелпердляслужбы$ b $bдоставкиСдэк,обновляеттолькоПВЗ,Безсинхронизациигородов