powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Передать файл 3 Gb по цепочке VBS->PHP->MySQL
53 сообщений из 53, показаны все 3 страниц
Передать файл 3 Gb по цепочке VBS->PHP->MySQL
    #38845076
manager5555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте гуру SQL. Новичку требуется ваш совет.

Задача - в автоматическом режиме регулярно передавать файл 3 Gb в PHP+MySQL

ОС с которого передается файл - Windows XP файл должен передаваться через VBS скрипт на клиенте и получаться PHP на сервере.

Как я себе это представляю - VBS используя ADO и Msxml2.XMLHTTP читает файл и отправляет PHP скрипту, который в свою очередь
перенаправляет поток данных в БД MySQL в столбец с типом LONGBLOB.

Либо VBS отправляет файл методом POST/http ...

Файл большой, жизнеспособна ли такая схема - непонятно. Как в такой ситуации работает PHP, хватит ли памяти принять такой файл.
Не будет ли сбоев из за ошибок передачи данных?

Подскажите направление, если схема жизнеспособна - буду работать в этом направлении дальше.
...
Рейтинг: 0 / 0
Передать файл 3 Gb по цепочке VBS->PHP->MySQL
    #38845085
NikolayV81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
manager5555Здравствуйте гуру SQL. Новичку требуется ваш совет.

Задача - в автоматическом режиме регулярно передавать файл 3 Gb в PHP+MySQL

ОС с которого передается файл - Windows XP файл должен передаваться через VBS скрипт на клиенте и получаться PHP на сервере.

Как я себе это представляю - VBS используя ADO и Msxml2.XMLHTTP читает файл и отправляет PHP скрипту, который в свою очередь
перенаправляет поток данных в БД MySQL в столбец с типом LONGBLOB.

Либо VBS отправляет файл методом POST/http ...

Файл большой, жизнеспособна ли такая схема - непонятно. Как в такой ситуации работает PHP, хватит ли памяти принять такой файл.
Не будет ли сбоев из за ошибок передачи данных?

Подскажите направление, если схема жизнеспособна - буду работать в этом направлении дальше.

случаи разные бывают, но с вероятностью 99% нежизнеспособна...
Бейти файл на части, шлите кусками (та же схема, но), вопрост только в том, зачем вам 3GB блоб в базе данных? Может его просто в файл на сервере?
Помимо прочего на таких объёмах неплохо бы проверять целостность файла...
...
Рейтинг: 0 / 0
Передать файл 3 Gb по цепочке VBS->PHP->MySQL
    #38845086
NikolayV81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NikolayV81 Бейте файл на част
...
Рейтинг: 0 / 0
Передать файл 3 Gb по цепочке VBS->PHP->MySQL
    #38845088
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
manager5555,

а какова причина выбора столько странной схемы?
теоретически, наверное, заставить работать ее возможно, но, имхо, это будет чудовищно неэффективно.
...
Рейтинг: 0 / 0
Передать файл 3 Gb по цепочке VBS->PHP->MySQL
    #38845095
NikolayV81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftmanager5555,

а какова причина выбора столько странной схемы?
теоретически, наверное, заставить работать ее возможно, но, имхо, это будет чудовищно неэффективно.

я за 2 торрент клиента и отправку хэша :) ...
...
Рейтинг: 0 / 0
Передать файл 3 Gb по цепочке VBS->PHP->MySQL
    #38845112
manager5555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я перезаложился по максимуму. 3 Гб - это максимально возможный размер файла. В основном файлы будут значительно меньше. Не знаю насчет трех, но гигабайт точно будут. Причина хранения файла в MySQL - больше негде хранить, а в MySQL места достаточно. Сохранять в папках нет возможности.
...
Рейтинг: 0 / 0
Передать файл 3 Gb по цепочке VBS->PHP->MySQL
    #38845113
manager5555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Идея с 2мя торрентами очень интересная и необычная, но сохранять 2-ой торрент на сервере некуда... Писать в папки запрещено.
...
Рейтинг: 0 / 0
Передать файл 3 Gb по цепочке VBS->PHP->MySQL
    #38845117
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
manager5555Я перезаложился по максимуму. 3 Гб - это максимально возможный размер файла. В основном файлы будут значительно меньше. Не знаю насчет трех, но гигабайт точно будут. Причина хранения файла в MySQL - больше негде хранить, а в MySQL места достаточно. Сохранять в папках нет возможности.А возможно коннектиться к MySQL извне?
...
Рейтинг: 0 / 0
Передать файл 3 Gb по цепочке VBS->PHP->MySQL
    #38845118
manager5555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сейчас нет, но в будущем такая возможность будет.
Так что пока, уверенно - нет.
...
Рейтинг: 0 / 0
Передать файл 3 Gb по цепочке VBS->PHP->MySQL
    #38845120
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
manager5555,

И можете ли вы изменять настройки MySQL ?
...
Рейтинг: 0 / 0
Передать файл 3 Gb по цепочке VBS->PHP->MySQL
    #38845122
manager5555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нет.
Нашел в интернете скрипт, по описанной выше схеме хранит изображения в MySQL. Но, изображения <15Mb, а мои потребности значительнее.
...
Рейтинг: 0 / 0
Передать файл 3 Gb по цепочке VBS->PHP->MySQL
    #38845123
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
manager5555нет.Тогда и так невысокие шансы резко падают.
Одно из препятствий - max_allowed_packet .

Рассмотрите вариант резать файл на множество кусочков, например, по мегабайту и хранить их в отдельных BLOB-ах.
...
Рейтинг: 0 / 0
Передать файл 3 Gb по цепочке VBS->PHP->MySQL
    #38845131
manager5555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,

show variables like 'max_allowed_packet' - показал 7 Мб. Значит будем разбивать файл на куски по 5 Мб.
Как лучше разбить файл? - при отправке, в клиенте отправляющем файл вести подсчет? Отправили 5 Мб, перезагружаем PHP скрипт, присваиваем следующий номер части файла, отправляем следующие 5 мб, и так по кругу... ?
Или rar-ом в командной строке создавать многотомный архив < 5 Мб том, и по одному файлу отправлять на сервер?
...
Рейтинг: 0 / 0
Передать файл 3 Gb по цепочке VBS->PHP->MySQL
    #38845258
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вариант примонтировать к серверу XP-шную директорию с файлом не рассматривается?
...
Рейтинг: 0 / 0
Передать файл 3 Gb по цепочке VBS->PHP->MySQL
    #38845351
ART-CODE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Согласен, нужна настройка сервера и нарезка на части.
Следует проверить всю цепочку органичений - не только в базе Mysql -> max_allowed_packet
но и в PHP:
-> max_execution_time - чтобы скрипт не отвалился раньше, чем закончит
-> max_post_size и max_post_file_size - ну, это понятно

Нарезка на части позволит еще и передавать сразу в несколько потоков.
Сначала передаем на сервер коллекцию хешей для всех частей и их номера и размеры.
Затем начинаем закачку.
В случае обрыва - всегда можно запросить у сервера какие части у него уже есть, а каких нет
и продолжить закачку недостающих частей.

Msxml2.XMLHTTP для гигабайтных размеров я не использовал, не знаю как себя поведет.

А по-хорошему подумайте над возможностью использования
pscp.exe - вызвал ее из командной строки, и все дела.
...
Рейтинг: 0 / 0
Передать файл 3 Gb по цепочке VBS->PHP->MySQL
    #38845358
ART-CODE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пожалуй, что нарезку действительно можно доверить архиватору, например 7z.
...
Рейтинг: 0 / 0
Передать файл 3 Gb по цепочке VBS->PHP->MySQL
    #38845403
netwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
manager5555Я перезаложился по максимуму.
Сохранять в папках нет возможности.
ничего не делайте - само пройдет после сессии.
...
Рейтинг: 0 / 0
Передать файл 3 Gb по цепочке VBS->PHP->MySQL
    #38847416
manager5555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, очень полезно почитать ваши соображения. Задался вопросом - оценить трудоемкости реализации:

А. - Файлобмен через SQL - не самый легкий способ для организации хранения больших файлов. Минусы - готовых решений нет, неизвестный объем работы по изобретению, отладке. Плюсы отсутствие затрат времени, сил на настройку/установку серверной части. Все настроено, работает, но с ограничениями.


Б. - FTP сервер, - не ясно как реализовать следующее:
Б.1 - На FTP каждый пользователь должен имеет доступ на запись только в свою папку.
Б.2 - FTP сервер каким то образом получает данные об учетных записях (логинах) пользователей с PHP+MySQL сервера (расположенного на другой машине). И на основании этих данных проводит авторизацию.

В. - Появилась свободная машина. На VirtualBox поднять свой LINUX/Deb - ОС + установить LAMP или XAMP .
Плюсы - никаких ограничений на запись в папки через протокол HTTP, то есть любые настройки PHP и MySQL. Для решения задач достаточно типовых PHP решений с небольшой правкой под себя. Минусы - нет опыта по установке и настройке Debian+XAMP(PHP+MySQL).
При перезагрузке основной ОС, можно ли сделать чтобы VirtualBox с Линуксом загружался автоматически.

Подскажите самый легкий вариант.
Вчера поработал с WAR-FTP + pscp.exe - для того, чтобы организовать работу FTP server, pscp, PHP, MySQL потребуется немало времени...

netwind - ирония не уместна. Лучше что нибудь полезное скажите...
...
Рейтинг: 0 / 0
Передать файл 3 Gb по цепочке VBS->PHP->MySQL
    #38847440
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
manager5555Б.2 - FTP сервер каким то образом получает данные об учетных записях (логинах) пользователей с PHP+MySQL сервера (расположенного на другой машине). И на основании этих данных проводит авторизацию.Насколько знаю, некоторые FTP-серверы умеют авторизовать своих пользователей по SQL-базе. Сходу не скажу, какой именно сервер и какую СУБД использует.


manager5555При перезагрузке основной ОС, можно ли сделать чтобы VirtualBox с Линуксом загружался автоматически.Конечно можно. При установке VirtualBox на FreeBSD даже готовые штатные стартовые скрипты для этого имеются.
...
Рейтинг: 0 / 0
Передать файл 3 Gb по цепочке VBS->PHP->MySQL
    #38847472
manager5555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle,

Только что поставил Lubuntu+XAMPP. Что касается PHP+MySQL думаю сам разберусь.
1. Как сделать, чтобы web сервер из Lubuntu был доступен всем машинам из интернета, учитывая что Lubuntu стоит на виртуалке.
2. Под Windows не поделится кто нибудь скриптом автозагрузки VirtualBox и автозапуском гостевой ОС.
3. Если файл - образ жесткого диска в VirtualBox *.vdi скопировать и подключить к другому VirtualBox - запустится ли установленная на него ОС? Если да, то бэкап ОС можно достаточно легко организовать.
...
Рейтинг: 0 / 0
Передать файл 3 Gb по цепочке VBS->PHP->MySQL
    #38847491
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
manager55551. Как сделать, чтобы web сервер из Lubuntu был доступен всем машинам из интернета, учитывая что Lubuntu стоит на виртуалке.Виртуалка тут не имеет значения. Смотрите в сторону маршрутизации, проброса портов и т.п. Конкретнее, не зная структуры сети сложно что-либо советовать.

manager55552. Под Windows не поделится кто нибудь скриптом автозагрузки VirtualBox и автозапуском гостевой ОС.В винде шедулером можно запустить. Что-то вроде
Код: sql
1.
VBoxManage startvm mashine_name --type headless

скорее всего.

manager55553. Если файл - образ жесткого диска в VirtualBox *.vdi скопировать и подключить к другому VirtualBox - запустится ли установленная на него ОС?Запустится. Разумеется, конфигурация виртуальной машины должна быть более-менее похожей.
Пара нюансов:
1. Если виртуалка 64-битная, то при 32-битной ОС хоста она не запустится - это следует иметь в виду.
2. Простое копирование файла виртуального диска не есть хорошо. Для этого имеется инструмент VBoxManage clonehd или clonevdi.
...
Рейтинг: 0 / 0
Передать файл 3 Gb по цепочке VBS->PHP->MySQL
    #38847493
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vkleВ винде шедулером можно запустить.Или ярлыком из Автозагрузки, если это устроит.
...
Рейтинг: 0 / 0
Передать файл 3 Gb по цепочке VBS->PHP->MySQL
    #38848718
manager5555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Оптимальным решением оказалось развертывание XAMPP для Windows.
Единственный минус - отсутствие безопасности, пакет предназначен для разработки.
Например из внешней сети, помимо своих скриптов есть возможность запустить phpinfo() и посмотреть очень много интересного про компьютер.

По затратам времени/ простоте настройки - самое эффективное решение.
Очень не требователен к ресурсам. Работает в фоновом режиме как служба Windows.

Как бы разграничить доступ к папкам в апаче - из локалки можно, из внешнего интернета - нельзя.
...
Рейтинг: 0 / 0
Передать файл 3 Gb по цепочке VBS->PHP->MySQL
    #38848786
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
manager5555Оптимальным решением оказалось развертывание XAMPP для Windows.
Единственный минус - отсутствие безопасности, пакет предназначен для разработки.Что мешает установить нужное из официальных дистрибутивов, которые предназначены для боевых серверов?


manager5555Например из внешней сети, помимо своих скриптов есть возможность запустить phpinfo() и посмотреть очень много интересного про компьютер.Надуманная проблема. Можно удалить этот файл или удалить строку с оной функцией. Можно вообще запретить в PHP все "лишние" функции.


manager5555Как бы разграничить доступ к папкам в апаче - из локалки можно, из внешнего интернета - нельзя.С чего вдруг?
...
Рейтинг: 0 / 0
Передать файл 3 Gb по цепочке VBS->PHP->MySQL
    #38849563
manager5555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle, Времени отведенное на задачи сжато, поэтому используются максимально автоматизированные решения.

Подскажите, как отправить из VBS за один запрос файл и переменную?

В HTML файле все выглядит довольно просто :

Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<html>
<head>
  <title>Загрузка файлов на сервер</title>
</head>
<body>
      <h2><p><b> Форма для загрузки файлов </b></p></h2>
      <form action="http://111.111.111.111/upload.php" method="post" enctype="multipart/form-data">
      <input type="file" name="filename"><br>
      <input type="hidden" name="UIN" value="EDAF4"> 
      <input type="submit" value="Загрузить"><br>
      </form>
</body>
</html>



Тоже самое на VBS:
Пробовал в строке XMLHTTP.Send WebForm.VarBody добавлять переменную - не работает сркипт...

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
'Описание класса FormClass 
    
'Пример создания: "Set WebForm = New WebFormClass" 
    
'Form.Action             ' Свойство - URL на который будут отправлены данные. (чтение/запись) 
'Form.AddField           ' Процедура - Добавление поля. 
'Form.AddFile            ' Процедура - Добавление файла. 
'Form.Boundary           ' Свойство - Разделитель между данными (чтение) 
'Form.Enctype            ' Свойство - Тип кодирования формы (Для отправки полей - "application/x-www-form-urlencoded". Для отправки полей и файлов - "multipart/form-data") (чтение/запись) 
'Form.Method             ' Свойство - Метод отправки данных (GET / POST) 
'Form.VarBody            ' Свойство - Сформированные данные для отправки (чтение/запись) 

'Пример отправки файла на сайт http://www.zalil.ru 
    
Dim WebForm 
'/// Создаём новый класс формы 
Set WebForm = New WebFormClass 
'/// Указываем куда будем отправлять данные 
WebForm.Action = "http://www.zalil.ru/upload/" 
'/// Устанавливаем метод передачи POST 
WebForm.Method = "POST" 
'/// Для того чтобы передались файлы устанавливаем тип кодирования multipart/form-data 
WebForm.Enctype = "multipart/form-data" 
'/// Добавляем файл 
WebForm.AddFile "file", "C:\boot.ini" 
'/// Запускаем процедуру отправку      
Submit WebForm 

Sub Submit(WebForm) 
    '/// Создаём объект отправки данных 
    Dim XMLHTTP 
    Set XMLHTTP = CreateObject("MSXML2.XMLHTTP") 
    '/// Открываем соединение с URL 
    XMLHTTP.Open WebForm.Method, WebForm.Action, False 
    '/// Если тип передачи данных POST, то добавляем к пакету заголовки 
    If WebForm.Method = "POST" Then 
        '/// Если отправляем с кодированием "multipart/form-data", то добавляем информацию о разделителе данных 
        If WebForm.Enctype = "multipart/form-data" Then 
            XMLHTTP.setrequestheader "Content-type", WebForm.Enctype & "; boundary=" & WebForm.Boundary 
        Else '/// В ином случае добавляем информацию о том, что данные отправляются формой 
            XMLHTTP.setrequestheader "Content-type", WebForm.Enctype 
        End If 
    End If 
    
    '/// Отправляем запрос 
    XMLHTTP.Send WebForm.VarBody
    '/// Смотрим статус ответа 
    Select Case XMLHTTP.Status 
    '/// Если 200 - OK. Данные переданы успешно 
    Case 200 
        Dim InternetExplorer 
        Set InternetExplorer = CreateObject("InternetExplorer.Application") 
        InternetExplorer.Visible = True 
        InternetExplorer.Navigate "about:blank" 
        Do 
                        WScript.Sleep 100 
        Loop Until InternetExplorer.readystate = 4 
        InternetExplorer.document.write XMLHTTP.responsetext 
    Case Else 
        MsgBox XMLHTTP.Status & " " & StatusText, vbCritical, "Ошибка при передаче данных !" 
    End Select 
End Sub 


'/// Класс формы 
Class WebFormClass 
        Private Fields, Files 
        Private PropertyEnctype, PropertyMethod, PropertyBoundary, PropertyAction 

        Private Sub Class_Initialize() 
            Fields = Array() 
            Files = Array() 
            PropertyEnctype = "application/x-www-form-urlencoded" 
            PropertyMethod = "GET" 
            PropertyBoundary = String(27, "-") & GenerateBoundary 
            PropertyAction = "about:blank" 
        End Sub 

        Public Property Let Action(Value) 
            PropertyAction = Value 
        End Property 

        Public Property Get Action() 
            Action = PropertyAction 
            If PropertyMethod = "GET" Then 
                Dim Params 
                Params = VarBody 
                If VarBody <> "" Then Action = Action & "?" & Params 
            End If 
        End Property 

        Public Property Get Boundary() 
            Boundary = PropertyBoundary 
        End Property 

        Public Property Get Method() 
            Method = PropertyMethod 
        End Property 

        Public Property Let Method(Value) 
            Value = UCase(Value) 
            If Value = "GET" Or Value = "POST" Then PropertyMethod = Value 
        End Property 

        Public Property Get Enctype() 
            Enctype = PropertyEnctype 
        End Property 

        Public Property Let Enctype(Value) 
            Value = LCase(Value) 
            If Value = "multipart/form-data" Or Value = "application/x-www-form-urlencoded" Then PropertyEnctype = Value 
        End Property 

        Public Sub AddField(Name, Value) 
            SetElement Fields, Name, Value 
        End Sub 

        Public Sub AddFile(Name, Value) 
            SetElement Files, Name, Value 
        End Sub 

        Private Function SetElement(ArrayRef, Name, Value) 
            For ElementID = 0 To UBound(ArrayRef) 
                If ArrayRef(ElementID)(0) = Name Then 
                    ArrayRef(ElementID)(1) = Value 
                    Exit Function 
                End If 
            Next 
            ReDim Preserve ArrayRef(UBound(ArrayRef) + 1) 
            ArrayRef(UBound(ArrayRef)) = Array(Name, Value) 
        End Function 
          

        Public Property Get VarBody() 
            If PropertyMethod = "POST" And PropertyEnctype = "multipart/form-data" Then 
                Const DefaultBoundary = "--" 
                Dim Stream 
                Set Stream = CreateObject("ADODB.Stream") 
                Stream.Type = 2 
                Stream.Mode = 3 
                Stream.Charset = "Windows-1251" 
                Stream.Open 
                
                Dim FieldHeader, FieldsBody 
                
                For Each Field In Fields 
                    FieldHeader = "Content-Disposition: form-data; name=""" & Field(0) & """" 
                    FieldsBody = FieldsBody & DefaultBoundary & PropertyBoundary & vbCrLf & FieldHeader & vbCrLf & Field(1) & vbCrLf 
                Next 
                
                Stream.WriteText FieldsBody 
                
                Dim FileHeader 
                
                For Each File In Files 
                    If LoadFile(File(1), Data) Then 
                        FileHeader = DefaultBoundary & Boundary & vbCrLf & "Content-Disposition: form-data; name=""" & File(0) & """; filename=""" & File(1) & """" & vbCrLf & "Content-Type: octet/stream" & vbCrLf & vbCrLf 
                        Stream.WriteText FileHeader 
                        Stream.Position = 0 
                        Stream.Type = 1 
                        Stream.Position = Stream.Size 
                        Stream.write Data 
                        Stream.Position = 0 
                        Stream.Type = 2 
                        Stream.Position = Stream.Size 
                    End If 
                Next 
                
                Stream.Position = 0 
                Stream.Type = 2 
                Stream.Position = Stream.Size 
                Stream.WriteText vbCrLf & DefaultBoundary & PropertyBoundary & DefaultBoundary 
                
                Stream.Position = 0 
                Stream.Type = 1 
                
                VarBody = Stream.Read 
            Else 
                For Each Field In Fields 
                    VarBody = VarBody & Escape(Field(0)) & "=" & Escape(Field(1)) & "&" 
                Next 
                For Each File In Files 
                    VarBody = VarBody & Escape(File(0)) & "=" & Escape(File(1)) & "&" 
                Next 
                if Len(VarBody) > 0 Then VarBody = Left(VarBody, Len(VarBody) - 1) 
            End If 
        End Property 

        Private Function LoadFile(Path, Data) 
            On Error Resume Next 
            Dim Stream 
            Set Stream = CreateObject("ADODB.Stream") 
            Stream.Type = 1 
            Stream.Mode = 3 
            Stream.Open 
            Stream.LoadFromFile Path 
            If Err.Number <> 0 Then Exit Function 
            Data = Stream.Read 
            LoadFile = True 
        End Function 

        Private Function GenerateBoundary() 
            Dim Char 
            Dim N 
            For N = 1 To 12 
                Randomize 
                Char = Chr(CLng(Rnd * 25) + 97) 
                If N Mod 2 Then Char = UCase(Char) 
                GenerateBoundary = GenerateBoundary & Char 
            Next 
        End Function 
End Class
...
Рейтинг: 0 / 0
Передать файл 3 Gb по цепочке VBS->PHP->MySQL
    #38849737
manager5555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
manager5555,

Благодарю за внимание, сегодня поправил скрипт, теперь отправляет за раз переменные и файл.

Вот этот кусок
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
Dim FieldHeader, FieldsBody
            
            For Each Field In Fields
                FieldHeader = "Content-Disposition: form-data; name=""" & Field(0) & """"
                FieldsBody = FieldsBody & DefaultBoundary & PropertyBoundary & vbCrLf & FieldHeader & vbCrLf & vbCrLf & Field(1) & vbCrLf & DefaultBoundary & PropertyBoundary & DefaultBoundary
            Next
            
            Stream.WriteText FieldsBody



Перемещаем в любое место после записи заголовка файла. И вуаля!
...
Рейтинг: 0 / 0
Передать файл 3 Gb по цепочке VBS->PHP->MySQL
    #38849820
manager5555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
manager5555,

дописал сегодня клиентскую часть. Подготовил файлы, для тестирования загрузки на сервер.
80 Мб, 150 Мб, 250 Мб, 500 Мб, 1000 Мб.

До этого, работоспособность проверял на файлах до 1 Мб, все работало.

Но после тестирования файла 80 Мб, ???, почему передача работает ТАК медленно. Интернет 25 Мб, сет. карта 100 Мб. Максимальная загрузка канала 0,1 - 0,2 % .

Кто бы мог подумать, что передача файлов через MSXML2.XMLHTTP такое медленное занятие ???

Клиент будет использоваться на широких каналах, какие способы передачи используют пропускную способность интернета на максимум?

Текущая скорость однозначно не устраивает.
...
Рейтинг: 0 / 0
Передать файл 3 Gb по цепочке VBS->PHP->MySQL
    #38849823
manager5555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Через PUTTY можно передавать POST ?
...
Рейтинг: 0 / 0
Передать файл 3 Gb по цепочке VBS->PHP->MySQL
    #38849845
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
manager5555Через PUTTY можно передавать POST ?Можно туннель организовать, а в нём передавать всё, что угодно. Вроде бы, в этом пакете есть утилита для копирования файлов на удалённый сервер.
...
Рейтинг: 0 / 0
Передать файл 3 Gb по цепочке VBS->PHP->MySQL
    #38849964
ART-CODE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТАК медленно
Ну, не просто же так я сказал нарезать и отправлять в несколько потоков :)
Впрочем, у принимающего сервера может быть ограничение по кол-ву потоков и памяти.

Быстрее отправка только через специальные готовые утилиты или грамотная самописка на чистых сокетах.
Ну и смотря, что принимает и как оно настроено.

Поскольку я окончательно запутался в том, какие технологии доступны, то даже и не знаю что посоветовать.
То у Вас ничего не доступно кроме базы, то вдруг свой сервер в виртуалке.
То вдруг какие-то FTP пытались использовать, и чем-то они тоже не устроили.
Ничего не понятно.
...
Рейтинг: 0 / 0
Передать файл 3 Gb по цепочке VBS->PHP->MySQL
    #38849976
manager5555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ART-CODE,

Да, все попробовал)))
Сейчас тестирую FTP + cURL - получше. Но выше 1 Мбита на аплоад не поднимается. Возможно на скорость каким то образом влияет, Windows XP. на 7-ке быстрее.

По технологиям - есть некоторые тонкости. FTP быстрее, но его нужно как то связать с логинами хранящимися в SQL. Либо сделать усеченный вариант идеи - все клиенты будут ходить на FTP под одним логином паролем - что не правильно. Не должно быть доступа у разных клиентов к файлам друг друга.
...
Рейтинг: 0 / 0
Передать файл 3 Gb по цепочке VBS->PHP->MySQL
    #38849978
manager5555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
manager5555,

Апач настроил, все параметры влияющие на макисмальный размер загружаемого файла - в том числе время выполнения скрипта. Готов принять 1,1 Гб.

Как я понял чтобы увеличить скорость для POST - люди отправляют один файл в несколько потоков. Chunk - недочитал сегодня. Завтра посмотрю в эту сторону. На крайний случай остается FTP с авторизацией всех по одной учетке.
...
Рейтинг: 0 / 0
Передать файл 3 Gb по цепочке VBS->PHP->MySQL
    #38850069
manager5555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
manager5555,

Подскажите, возможна ли докачка по FTP? Через cURL ?
...
Рейтинг: 0 / 0
Передать файл 3 Gb по цепочке VBS->PHP->MySQL
    #38850074
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
manager5555возможна ли докачка по FTP? Через cURL ?Возможна.
...
Рейтинг: 0 / 0
Передать файл 3 Gb по цепочке VBS->PHP->MySQL
    #38850093
accessprogrammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Посмотрите в сторону Bittorent Sync — быстрая синхронизация больших файлов на максимально скорости канала в фоновом режиме.
...
Рейтинг: 0 / 0
Передать файл 3 Gb по цепочке VBS->PHP->MySQL
    #38850103
ART-CODE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так,
1 - FTP сервер позволяет создавать сколько угодно учетных записей и у каждой учетки может быть свой
каталог, более того, я имел такой сервер, который по событиям мог запускать внешние программы,
передавая им параметры - свойства событий: такой-то пользователь с такого-то IP загрузил такой-то файл.
Таким образом, можно настроить автоматизацию чего угодно.
Такие опыты я ставил с G6FTP Server, думаю, что и в других должно быть что-то похожее.
Проблема с FTP в другом - безопасность, т.е. на самом деле нужен SFTP,
и есть большие сложности с проксированием такого соединения.
Без вмешательства админа прокси, обычный пользователь корпоративной сети
не получит доступа к FTP серверу в интернет.

Но, на сколько я знаю, можно же в линукс создать пользователя, выдать ему права только на
определенную папку, и далее он подключается по SSH и попадает сразу в свою папку.
Так и передавать файлы при помощи pscp.exe

2 - Все-таки нужно определиться, Вы хотите занять весь канал или многопользовательскую работу ?
Если действительно удастся передавать данные во всю ширину канала, то никто не пробьется к серверу в это время.
В свое время я писал приемо-передатчик файлов на C++ и сокетах,
тогда уперся в скорость записи жесткого диска на принимающей стороне.
Передавал бекапы между сервером и хранилищем, там я действительно имел право занять весь канал,
т.к. это был прямой кабель между серверами, и никому такое агрессивное поведение не помешает.

3 - Реализация сетевых функций на разных версиях ОС действительно отличается.
И в XP она самая примитивная. Это да. Что может влиять на производительность.
Обратите внимание в каких версиях ОС есть функции TransmitFile function и TransmitPackets .

Если Вы создаете сервис для пользователей типа"Дроп бокс", "яндекс диск",
то не надо себя ограничивать VBS и MySQL :)
Можно, конечно, совсем залезть в дебри, научиться управлять алгоритмом Нейгла и т.п.
Но, пока не ясно что же делаете и зачем и что можно задействовать, а чего нельзя.
...
Рейтинг: 0 / 0
Передать файл 3 Gb по цепочке VBS->PHP->MySQL
    #38854508
manager5555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Благодарю за интерес к теме. Немного о состоянии задачи. Задача решена, маленькие файлы ргузим по HTTP большие по FTP.
Как и обсуждалось - поставил XAMPP для Windows настроил по рекомендациям безопасность. На PHP + MySQL написал серверную часть, отладил. Все заработало и хорошо!
Но.

Так как для удаленного управления на машине открыт 3389 порт. В интернет.
Стали брутить мой RDP, пароли пока держатся. Компьютер подтормаживает при большом количестве атакующих. Но это ладно.
Здесь кто то говорил про защиту от SQL Injection. Неожиданно быстро нашелся человек, который просканировал серверную часть моей программы, видимо нашел уязвимость и потер все мои таблицы.

Причем происходило это у меня на глазах. Утром зашел проверить как дела. Пароли на SQL поменены, рут и рабочий, соответственно PHP не может подключиться и добавить данные в базу. Стал все возвращать на свои места. Человек почувствовал, что обнаружен, потер все таблицы и смылся. Ничего ценного не потеряно, так как нормальные люди делают бэкап. Но если таким образом вы собрались хранить данные о банковских счетах, кредитках или домашнее порно - Это вам урок.

Сразу отвечу на обычные в такой ситуации вопросы:

RDP - изменить порт на нестандартный. - Нет возможности, только 3389.

Прогнать сайт сканером уязвимостей типа Acunetix перед запуском в работу. На это не хватило времени. Работы много, перво очередная задача была - запустить, чтобы работало! Она выполнена.

А теперь вопрос, как защитиься от QSL injection?
P.S. SQL закрыт для внешнего интернета, так что дыра скорее всего в писаных мной PHP скриптах.

ART CODE, могу занять 50% канала. Писать на СИ и сокетах для меня долгое дело. Текущий вариант - самое то что надо. Есть конечно в чем совершенствоваться, времени на это пока нет.
...
Рейтинг: 0 / 0
Передать файл 3 Gb по цепочке VBS->PHP->MySQL
    #38854513
netwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПричем происходило это у меня на глазах.
сволочи!
авторА теперь вопрос, как защитиься от QSL injection?
P.S. SQL закрыт для внешнего интернета, так что дыра скорее всего в писаных мной PHP скриптах.
Очевидно, не писать код допускающий SQL injection. А с чего вы взяли что у вас она уже есть ?

автор Писать на СИ и сокетах для меня долгое дело
Там очно так же можно случайно написать sql-injection.
...
Рейтинг: 0 / 0
Передать файл 3 Gb по цепочке VBS->PHP->MySQL
    #38854583
ART-CODE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
manager5555только 3389
Винда?
Вы же внешний порт поменять не можете - роутер не позворляет ? А внутренний - можете ?
Если да, то можно попробовать поставить туннель между внешним портом 3389
и внутренним адресом 127.0.0.1:8889 на который настроить RDP.
А на уровне туннеля иметь ограничения по IP, времени работы и т.п.

Если нельзя сдвинуть порт то можно попробовать управлять службой RDP из планировщика задач:
сделать админские окна - каждый час на 5 минут включается служба.
После захода отключаем задание, чтобы не "выбило", а когда поработали - снова включаем и выходим.

Вы же файлы загружаете ?
Вот, скорее всего Вам и загрузили PHP или какой-то другой скрипт/программу и выполнили.
Разберитесь с каталогами и правами загрузки/выполнения.
Переустановите ОС. Теперь наверняка уже есть тайный вход.

Включите файловый монитор, логируйте события файловой системы в надежное, не затираемое место
(например логи можно сразу отсылать построчно на другой компьютер.)
Включите сетевой монитор, логируйте сетевые подключения.
Включите монитор процессов, логируйте.

На все это есть у меня свои секретные самописки, поэтому ничего предложить не могу, поищите что-то в интернет.
Хороши программы TCPView и FileMon и ProcMon найдите исходники, может переделаете под себя.
...
Рейтинг: 0 / 0
Передать файл 3 Gb по цепочке VBS->PHP->MySQL
    #38854587
ART-CODE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и еще вариант: управлять запуском/остановкой службы RDP по почте/смс/придумать что-то еще свое.
...
Рейтинг: 0 / 0
Передать файл 3 Gb по цепочке VBS->PHP->MySQL
    #38854682
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
боишься SQL injection?
используй хранимые процедуры.
...
Рейтинг: 0 / 0
Передать файл 3 Gb по цепочке VBS->PHP->MySQL
    #38854691
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадябоишься SQL injection?
используй хранимые процедуры.Ерунда полнейшая. SQL injection и хранимые процедуры - вещи перпендикулярные. Налететь можно равно как ними, так и без них.
...
Рейтинг: 0 / 0
Передать файл 3 Gb по цепочке VBS->PHP->MySQL
    #38854756
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,
здесь уже обсуждалось такая прблема и выясгили, что налететь на это можно только в одном случае - динамической генерации зпроса в хранимке. а это намного реже встречающийсч случай.
...
Рейтинг: 0 / 0
Передать файл 3 Gb по цепочке VBS->PHP->MySQL
    #38854814
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяmiksoft,
здесь уже обсуждалось такая прблема и выясгили, что налететь на это можно только в одном случае - динамической генерации зпроса в хранимке. а это намного реже встречающийсч случай.Не заниматься бездумной динамической генерацией запроса можно и без хранимки с равным успехом.
...
Рейтинг: 0 / 0
Передать файл 3 Gb по цепочке VBS->PHP->MySQL
    #38856644
manager5555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,
Так вот, решил не заниматься бездумной генерацией хранимок, и на время отключил mysql на сервере. Сейчас работает только Apache+PHP. Из рабочей директории сервера удалил все скрипты и папки XAMPP, оставил только свои. Просканировал сайт Acunetix.
критических ошибок нет.

Что хочется поправить.
У пользователя через Веб не должно быть прав доступа в папку Reports. Как настроить апач таким образом? Скрипт *.php может читать/писать. в папку Reports, а через веб интерфейс она не доступна.
...
Рейтинг: 0 / 0
Передать файл 3 Gb по цепочке VBS->PHP->MySQL
    #38856661
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
manager5555У пользователя через Веб не должно быть прав доступа в папку Reports. Как настроить апач таким образом? Скрипт *.php может читать/писать. в папку Reports, а через веб интерфейс она не доступна.Можно в .htaccess этой директории прописать Deny from all или просто вынести директорию за пределы DocumentRoot вебсервера.
...
Рейтинг: 0 / 0
Передать файл 3 Gb по цепочке VBS->PHP->MySQL
    #38856797
manager5555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle,

Благодарю, все заработало.
...
Рейтинг: 0 / 0
Передать файл 3 Gb по цепочке VBS->PHP->MySQL
    #38859830
manager5555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
manager5555,

Уважаемые форумчане, благодарю за внимание к теме. Появилась задача, для решения которой хочу привлечь специалиста, сколько может стоить такая работа, ссылка на тему - http://www.sql.ru/forum/1138226/napisat-1-skript-php-zaprosy-k-mysql
ТЗ лежит здесь - https://www.sendspace.com/file/yhyrf3

Без изысков в дизайне страницы, главное правильно работающий функционал.
...
Рейтинг: 0 / 0
Передать файл 3 Gb по цепочке VBS->PHP->MySQL
    #38860471
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
manager5555Здравствуйте гуру SQL. Новичку требуется ваш совет.

Задача - в автоматическом режиме регулярно передавать файл 3 Gb в PHP+MySQL

ОС с которого передается файл - Windows XP файл должен передаваться через VBS скрипт на клиенте и получаться PHP на сервере.

Как я себе это представляю - VBS используя ADO и Msxml2.XMLHTTP читает файл и отправляет PHP скрипту, который в свою очередь
перенаправляет поток данных в БД MySQL в столбец с типом LONGBLOB.

Либо VBS отправляет файл методом POST/http ...

Файл большой, жизнеспособна ли такая схема - непонятно. Как в такой ситуации работает PHP, хватит ли памяти принять такой файл.
Не будет ли сбоев из за ошибок передачи данных?

Подскажите направление, если схема жизнеспособна - буду работать в этом направлении дальше.

цитирую стартовый пост, ибо с моей точки зрения уже сдесь допущенна ошибка.

VBS - он конечно обладает средствами для передачи данных на другие машины, но будем обьективными... это всё-таки не те задачи, которые надо решать с помощью этого языка.

я бы предложил, через вбс лишь стартовать нечто, с паратетром имя файла, что уже осуществит реальную передачу. - на худой конец(а довольно таки трезвое решение)
есть файл, на вбс два действия -
1)через утилиту фтп в виндоус закидываем файл на фтп сервер...
2)дёргаем на том же сервере скрипт для обработки этого файла.

всётаки еффективная работа с сетью обеспечиваеться сетевыми утилитами, а не своим кодом на языках высокого уровня.

ЗЫ
у меня передача от веб сервера веб серверу файла постом. говорите CURL - так он в 2-3 случаях на 1000 даёт збой табильно не преодолимый - то есть никакие повторы уже не сработаю, только новый запуск пхп скрипта, а вот воспользовать системной утилитой , тотже курл - это стопроцентно... покрайней мере за период работы системы, таких передач уже было около 100 000 000, стабильно периодически в лог попадает запись о том что курл дал сбой, задействован запасной метод передачи, и запасной передал.

тестово включался запасной как основной - сбоев нету.
...
Рейтинг: 0 / 0
Передать файл 3 Gb по цепочке VBS->PHP->MySQL
    #38860476
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да и 3гб, тут советуют на части бить..таки у меня файлы и по 50гб и да бьются на части, но там другие причины.

а фтп- оборвёться передача, не страшно...её можно продолжить, притом не заботиться о вычислении места обрыва.
...
Рейтинг: 0 / 0
Передать файл 3 Gb по цепочке VBS->PHP->MySQL
    #38861173
manager5555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex564657498765453,

Алексей, методом проб и ошибок пришел к тому же мнению. Через ФТП загружать файл эффективнее, предварительно разбив на части.
Сейчас другая задача, написать 5 - 6 sql запросов.
...
Рейтинг: 0 / 0
Передать файл 3 Gb по цепочке VBS->PHP->MySQL
    #38861194
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
manager5555Через ФТП загружать файл эффективнее, предварительно разбив на части.Ещё, на мой взгляд, rsync хорош для такой задачи. Однозначно, нет необходимости бить файл. Да и при незначительных изменениях файла в ряде случаев не потребуется перезкачивать его целиком, хотя, тут более от конкретных изменений самого файла зависит.
...
Рейтинг: 0 / 0
Передать файл 3 Gb по цепочке VBS->PHP->MySQL
    #38861246
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vklemanager5555Через ФТП загружать файл эффективнее, предварительно разбив на части.Ещё, на мой взгляд, rsync хорош для такой задачи. Однозначно, нет необходимости бить файл. Да и при незначительных изменениях файла в ряде случаев не потребуется перезкачивать его целиком, хотя, тут более от конкретных изменений самого файла зависит.

поддерживаю - при фтп нет нужды бить файл на части.

автор, я бью на части файлы по причинам

1)главная - файл не сохраняеться в привычном виде, файл сохраняеться с избыточностью на серии серверов, таким образом, что выход пары серверов из строя не нарушают целостность файла.

2)управление загруженностью серверов. чтоб более менее равномерно

3)ускорение закачки на сервер и скачки... это в несколько потоков, притом что закачивать и скачивать можно - да и нужно не на один сервер, а на любой из кластера.

тоесть я бью файл на части именно изза особеностей сохранения и извлечения из кластера.

вам это никчему. подобное может быть нужно, где нет возможности, или трудно продолжить закачку, а обрывы очено вероятны...то чтобы не закачивать 1 терабайт пока наступит чудо и 3гб закачаются без сбоя, бьют на части.

мне
...
Рейтинг: 0 / 0
53 сообщений из 53, показаны все 3 страниц
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Передать файл 3 Gb по цепочке VBS->PHP->MySQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]