Имя: Пароль:
1C
 
Как подключиться к сайту PHP из 1С?
,
0 SpLorT
 
17.10.24
11:43
Помогите пожалуйста. Как подключиться к сайту php из 1С?

ВОТ КОД 1С:

	HTTPСоединение = Новый HTTPСоединение("");
		
	ДвоичныеДанные = Новый ДвоичныеДанные(ФайлPNG);
	ФайлBase64 = Base64Строка(ДвоичныеДанные);
	ИмяФайлаОтправки =   ПолучитьИмяВременногоФайла();
	
	Boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", "");
	
	ФайлОтправки = Новый ЗаписьТекста(ИмяФайлаОтправки, КодировкаТекста.UTF8, Символы.ПС, Ложь);
	ФайлОтправки.ЗаписатьСтроку("--" + Boundary); 
	
	ФайлОтправки.ЗаписатьСтроку("Content-Disposition: form-data; file_data=""file_data""");
	ФайлОтправки.ЗаписатьСтроку("Content-Type: image/png" + Символы.ПС + Символы.ПС); 
	ФайлОтправки.ЗаписатьСтроку(ФайлBase64); 
	ФайлОтправки.ЗаписатьСтроку("--" + Boundary);
	ФайлОтправки.Закрыть();
	
	ЗаголовокHTTP = Новый Соответствие();
	ЗаголовокHTTP.Вставить("Content-Type", "multipart/form-data; boundary=" + Boundary);
	HTTPЗапрос = Новый HTTPЗапрос("report.tmotor.ru/report/php/tel_upload.php",ЗаголовокHTTP);
	//HTTPЗапрос.УстановитьИмяФайлаТела(ФайлНаОтправку.ПолноеИмя);
	Результат = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос,ИмяФайлаОтправки);
	Если Результат.КодСостояния = 200 Тогда
		Тест = Результат.ПолучитьТелоКакСтроку();	
	КонецЕсли;


ВОТ КОД PHP ФАЙЛА:
<?php
session_start();


if (!isset($_POST['file_data']) || !isset($_POST['file_name'])) {

	if (!isset($_POST['file_data'])) {
		echo "Файл рисунка нет"; 
	}

	if (!isset($_POST['file_name'])) {
		echo "Имя файла нет"; 
	}

	exit;
}

$fileData = $_POST['file_data'];
$fileName = $_POST['file_name'];


echo "Файл успешно загружен: " . htmlspecialchars($fileName); 
   
?>
1 Волшебник
 
17.10.24
11:45
В чём проблема?
2 SpLorT
 
17.10.24
11:47
(1) не передается файл и обратной связи в 1С не получаю(echo "Файл успешно загружен: ")
3 Волшебник
 
17.10.24
11:51
(2) Сделайте тестовый скрипт без передачи файла. Добейтесь ответа 200.
4 SpLorT
 
17.10.24
12:38
ответ 200 приходит но файл не подгружается
6 Волшебник
 
17.10.24
11:53
(4) В Вашем PHP-скрипте нет команды сохранения файла
7 SpLorT
 
17.10.24
11:55
а как же вот эта часть кода?
$filePath = "../report/raschet_list/". $file_name. ".png";
если что я не писал php файл занимаюсь только интеграцией из 1С так что не подскажу что в коде php находится
8 SpLorT
 
17.10.24
11:55
мне нужно понять только одно на моей стороне как 1С-ника что не так написано
9 Звездец
 
17.10.24
12:27
ну так сначала попробуй сайт дернуть например постманом, чтобы понять работает скрипт или нет
10 Волшебник
 
17.10.24
12:27
(7) Это присвоение значения переменной
11 Hmster
 
17.10.24
12:42
В чем прикол гонять данные через Base64? Почему очень многие любят так делать?
12 Мультук
 
гуру
17.10.24
12:43
1) Как минимум имя сайта тут не надо

HTTPЗапрос = Новый HTTPЗапрос("report.tmotor.ru/report/php/tel_upload.php",ЗаголовокHTTP);

2) Возьмите уже
https://github.com/vbondarevsky/Connector

Там всё уже написано за вас
13 Мультук
 
гуру
17.10.24
12:58
(11)

Не то чтобы любят...

wiki:Base64
14 Garykom
 
гуру
17.10.24
13:30
(11) Потому что протокол wiki:HTTP только текстовые данные
Все символы, что не влазят (например двоичные данные), приходится оборачивать в Base64
15 Garykom
 
гуру
17.10.24
13:32
(14)+ Тяжкое наследие прежних времен с кучей ограничений
Давно уже придуман wiki:HTTP/2
В отличие от предыдущих версий, протокол HTTP/2 является бинарным

И даже wiki:HTTP/3
16 Мультук
 
гуру
17.10.24
14:00
(15)

Это что то вроде ipv6, придумали, порадовались, поцокали языками и внедряют до сих пор ?
17 sikuda
 
17.10.24
14:41
(10) Вот именно, человек подумал что про сразу все поймет и в 1С и в php 🤦

Примет тестового сайта для загрузки картинок... https://sikuda.ru/php/img_host/
Код загрузки взятый из интернета но не до конца осознанный...
<?php
$target_dir = "uploadimages/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));

// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
  $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
  if($check !== false) {
    echo "File is an image - " . $check["mime"] . ".";
    $uploadOk = 1;
  } else {
    echo "File is not an image.";
    $uploadOk = 0;
  }
}

// Check if file already exists
if (file_exists($target_file)) {
  echo "Sorry, file already exists.";
  $uploadOk = 0;
}

// Check file size
if ($_FILES["fileToUpload"]["size"] > 500000) {
  echo "Sorry, your file is too large.";
  $uploadOk = 0;
}

// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
  echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
  $uploadOk = 0;
}

// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
  echo "Sorry, your file was not uploaded.";
// if everything is ok, try to upload file
} else {
  if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
    header('Location: show_result.php?pic='.$target_file);  
    echo "The file ". htmlspecialchars( basename( $_FILES["fileToUpload"]["name"])). " has been uploaded.";
  } else {
    echo "Sorry, there was an error uploading your file.";
  }
}
?>
18 Krendel
 
17.10.24
14:37
А где Паша Мидер Тарзан?
19 Garykom
 
гуру
17.10.24
15:31
(16) ipv6 уже много где работает
проблема в том что отказываться от ipv4 не хотят

точно так же с HTTP/1.X
20 sikuda
 
17.10.24
15:35
(19) А разве в 1С:Предприятии 8.3 можно по HTTP/2?
21 Garykom
 
гуру
17.10.24
15:39
22 Hmster
 
17.10.24
16:23
Не знаю про версию HTTP, но бинарники спокойно гоняются уже много лет.
Content-Type: application/octet-stream и тело запроса из двоичных данных прекрасно работают