Вход | Регистрация


1С:Предприятие ::

Метки: Интернет-технологии

Положить прайс zip на сайт с помошью v7plus

Я
   Gruz
 
28.06.04 - 19:14
Пишу нечто вроде ...
HTTP.ОтправитьДляОбработки(АдресСайта+"/getzip.php", ПутьПрайса, 1, Ответ, 2);

Вопрос в том, как в PHP достать это прайс ???
 
  Рекламное место пустует
   Волшебник
 
1 - 28.06.04 - 21:32
Наверное через параметр $_POST
   shura
 
2 - 29.06.04 - 04:21
Так тебе надо положить или забрать?
   shura
 
3 - 29.06.04 - 04:22
Понял, сорри. Туплю уже под утро...
   shura
 
4 - 29.06.04 - 04:33
Загрузка методом POST
PHP способен принимать загрузку файлов из любого RFC-1867-соответствующего браузера (в том числе - Netscape Navigator 3 и новее, Microsoft Internet Explorer 3 с патчем от Microsoft или новее без патча). Это даёт возможность загружать текстовые и бинарные файлы. С помощью функций РНР для аутентификации и манипуляций с файлами вы получаете полный контроль над тем, кому разрешено загружать файлы, и над тем, что делать с файлом после его загрузки.

Заметьте, что PHP поддерживает также загрузку методом PUT, который используется в Netscape Composer и в Amaya-клиентах W3C. См. также "Поддержка метода PUT".

Экран загрузки файлов может быть создан с помощью специальной формы примерно так:Пример 19-1. Форма для загрузки файлов
<form enctype="multipart/form-data" action="_URL_" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="1000">
Send this file: <input name="userfile" type="file">
<input type="submit" value="Send File">
</form>
 
 


_URL_ должен указывать на PHP-файл. Скрытое поле MAX_FILE_SIZE обязано предшествовать полю ввода файла/file input field, и его значение это максимальный размер принимаемого файла. Значение в байтах.

Предупреждение!
MAX_FILE_SIZE является для браузера лишь уведомляющим. Легко обойти этот максимум. Поэтому не рассчитывайте, что браузер будет повиноваться вашим желаниям! Однако PHP-установки maximum-size обмануть нельзя.


Переменные, определяемые для загруженных файлов, зависят от версии PHP и конфигурации. Следующие переменные будут определены в скрипте назначения после успешного завершения загрузки. Если track_vars включена, инициализируется массив $HTTP_POST_FILES/$_FILES. Наконец, соответствующие переменные могут быть инициализированы как глобалы, если register_globals включена. Однако использовать глобалы больше не рекомендуется.

Примечание: track_vars всегда включена, начиная с версии PHP 4.0.3. Начиная с версии PHP 4.1.0, можно использовать $_FILES вместо $HTTP_POST_FILES.
$_FILES всегда является глобальной, поэтому global не должно использоваться для $_FILES в области видимости функции.

$HTTP_POST_FILES/$_FILES предоставлены для вмещения информации загруженных файлов.

Далее идёт содержимое $_FILES. Обратите внимание, что здесь предполагается использование имени 'userfile' для загружаемого файла, как в примере скрипта ранее:

$_FILES['userfile']['name']
Оригинальное имя файла на клиентской машине.

$_FILES['userfile']['type']
mime-тип файла, если браузер предоставил эту информацию. Пример: "image/gif".

$_FILES['userfile']['size']
Размер загруженного файла в байтах.

$_FILES['userfile']['tmp_name']
Временное имя файла, под которым загруженный файл был сохранён на сервере.

Примечание: в PHP версии до 4.1.0 она называлась $HTTP_POST_VARS и не была автоглобальной переменной. PHP 3 не поддерживает $HTTP_POST_FILES.

Если register_globals включена в php.ini, то будут доступны нижеследующие переменные. Обратите внимание, что имена этих переменных предполагают использование имя файла для загрузки 'userfile', как в примере предыдущего скрипта:

$userfile - Временное имя файла, под которым загруженный файл был сохранён на сервере.

$userfile_name - Оригинальное имя или путь к файлу на системе отправителя.

$userfile_size - Размер загруженного файла в байтах.

$userfile_type - mime-тип файла, если браузер предоставил эту информацию. Пример: "image/gif".

Заметьте, что часть "$userfile" этих переменных это имя, которое записано в поле <input> type="file" в форме загрузки. В предыдущем примере формы мы назвали её "userfile".

Примечание: register_globals = On не рекомендуется по соображениям производительности и обеспечения безопасности.

Файлы будут по умолчанию сохраняться во временной директории по умолчанию на сервере, если только не задано другое место директивой upload_tmp_dir в php.ini. Директория по умолчанию сервера может быть изменена через установку переменной окружения TMPDIR в среде, в которой работает PHP. Установка её с использованием putenv() из РНР-скрипта не будет работать. Эта переменная окружения может также использоваться для того, чтобы гарантировать, что другие операции также работают с загруженными файлами. Пример 19-2. Проверка загрузки файлов
Следующие примеры предназначены для версий PHP 4 выше 4.0.2. См. о функциях is_uploaded_file() и move_uploaded_file().

<?php
// В PHP ранее 4.1.0 должна использоваться $HTTP_POST_FILES вместо $_FILES.

if (is_uploaded_file($_FILES['userfile']['tmp_name'])) {
    copy($_FILES['userfile']['tmp_name'], "/place/to/put/uploaded/file");
} else {
    echo "Possible file upload attack. Filename: " . $_FILES['userfile']['name'];
}
/* ...или... */
move_uploaded_file($_FILES['userfile']['tmp_name'], "/place/to/put/uploaded/file");
?>
 
 


PHP-скрипт, который получает загружаемый файл, должен реализовывать логику, необходимую для определения того, что нужно сделать с загруженным файлом. Вы можете, например, использовать переменную $_FILES['userfile']['size'] для исключения файлов, которые слишком малы или велики. Вы можете использовать переменную $_FILES['userfile']['type'] для исключения файлов, которые не отвечают критериям определённого типа. При любой логике вы должны либо удалять, либо перемещать такие файлы из временной директории.

Файл будет удалён из временной директории по окончании запроса, если он (файл) не перемещён или не переименован.
   Gruz
 
5 - 29.06.04 - 09:44
Это все прекрасно. Вопрос в том, как передать ИМЯ передаваемого файла из 1С.

делаю так ...
Заголовок1=\"Content-Disposition: form-data; name=\"+Симв(34)+\"userfile\"+Симв(34)+\"; filename=\"+Симв(34)+\"rozn.zip\"+Симв(34)+РазделительСтрок+\"Content-Type: application/x-zip\"+РазделительСтрок;
HTTP.УстановитьЗаголовокЗапроса(\"MyAction\",Запрос1);
HTTP.ОтправитьДляОбработки(АдресСайта+\"/getzip.php\", ПутьПрайса, 1, Ответ, 2);

... на стороне сайта

<?
if (is_uploaded_file($_FILES[\'userfile\'][\'tmp_name\']))
{copy($_FILES[\'userfile\'][\'tmp_name\'], \"rozn.dll\");}
else
{echo \"Possible file upload attack. Filename: \" . $_FILES[\'userfile\'][\'name\'];}
?>

Идет по ветке \"else\" :((
   Gruz
 
6 - 29.06.04 - 12:54
I need help
   shura
 
7 - 30.06.04 - 13:51
А почему апострофы заэкранированы?
   shura
 
8 - 30.06.04 - 14:15
Попробуй еще передать переменную 'name="MAX_FILE_SIZE" value="1000"', посмотри, включена-ли в php.ini 'track_vars'.
Посмотри, что выводит
echo $userfile.",".$userfile_name.",".$userfile_size.",".$userfile_type
   shura
 
9 - 30.06.04 - 15:17
Заголовок1 <> Запрос1
   shura
 
10 - 30.06.04 - 15:29
А вообще-то может так надо?:
HTTP.УстановитьЗаголовокЗапроса("Content-Disposition","form-data");
HTTP.УстановитьЗаголовокЗапроса("Content-Type","application/x-zip");
HTTP.УстановитьЗаголовокЗапроса("MAX_FILE_SIZE","1000");
HTTP.УстановитьЗаголовокЗапроса("userfile",ПутьПрайса);
HTTP.ОтправитьДляОбработки(АдресСайта+\"/getzip.php\", ПутьПрайса, 1, Ответ, 2);
 
  Рекламное место пустует
   shura
 
11 - 30.06.04 - 15:31
ЗЫ: Блин, приятно побеседовать с хорошим собеседником ;))
   shura
 
12 - 01.07.04 - 16:39
Мне интересно: результат какой-нить есть?
   Gruz
 
13 - 01.07.04 - 17:14
Щас попробую ...
   shura
 
14 - 01.07.04 - 17:26
А вообще проще через ФТП выложить... Меньше гемора.
   Gruz
 
15 - 01.07.04 - 17:35
Через ФТП обработку написал без проблем. Через  HTTP загружаю-выгружаю файлы. Но только текстовые. Бинарные пока не удается.
Просто хочется добиться, чтобы все замойдействие с сайтом шло через HTTP. Оно и быстрее и безопаснее ...
   Gruz
 
16 - 01.07.04 - 17:42
Выводит ,,, 
:)
   shura
 
17 - 01.07.04 - 18:26
(16) Обыдно...
А вот с последним предложением в (15) категорически не согласен.
   Konstantin2004
 
18 - 01.07.04 - 18:35
Будте добры, подскажите никак не могу поставить шестёрку на ХР!!!!Заранее благодарен!!Константин
   shura
 
19 - 01.07.04 - 18:56
Я еще могу понять поставить ХР на шестерку (если бортовой комп всунуть туда), но чтоб мою ласточку водрузили на коробку с ХР...
Блин, балон пробить можно ;((
   Konstantin2004
 
20 - 01.07.04 - 18:58
ну а если не шутить
   shura
 
21 - 01.07.04 - 19:02
»
   Konstantin2004
 
22 - 01.07.04 - 19:16
»
   Gruz
 
23 - 02.07.04 - 09:28
Выгрузка через FTP предполагает хранение где-то в недрах 1С пароля на доступ к сайту. Причем, если злоумышленник или человек с кривыми руками узнает его - то он получит доступ ко всему сайту. Если выгрузку делаем с помощью V7plus (HHTP), то достаточно запоролить только ту папку, к которой нужен доступ.
   *
24 - 02.07.04 - 12:21
При использовании метода ОтправитьДляОбработки(), V7plus игнорирует все УстановитьЗаголовокЗапроса(...).
Я в своё время на это напоролся, теперь вместо V7plus юзаю WinHTTP...
   Gruz
 
25 - 02.07.04 - 12:27
Опиши поподробнее как ты юзаешь WinHTTP в 1С. Если можно то примерчик ...
   shura
 
26 - 02.07.04 - 13:50
(23) А слабо создать неанонимный виртуальный ФТП сервер и открыть доступу только к одной папке куда надо складывать файлы? Тем более, как я понимаю, сервак у вас свой.
А если руки кривые, то тут уже ничего не поможет...
   Лошадка в пальто
 
28 - 27.09.04 - 19:55
Волею пославшего мя Рупора...
Так лучше?



Список тем форума
Рекламное место пустует  
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует