- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Как снизить ДРР до 4,38% и повысить продажи с помощью VK Рекламы
Для интернет-магазина инженерных систем
Мария Лосева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Кто нибудь принимал файлы с помощью С++?
Тоесть в браузере
необходимо выбрать файл, нажать submit, а *.cgi на сервере вынимает из пришедших данных файл и сохраняет его на диск.
Написал програмку но она коректно сохраняет только текстовые файлы, ежели прислать jpg картинку то в ней совпадает только первых несколько десятков символов, а дальше все символы заменяются на буквы я.
Где зарыта собака?
Вот небольшой пример(сохраняю весь запрос в файл) который глючит аналогично:
я не сишник, но мне немного не понятно зачем
printf("Pragma: no-cache\n");
printf("\n");
при сохранении файла :\ в частности бинарного
$ man 3 fgetc
я не сишник, но мне немного не понятно зачем
printf("Content-type: text/html\n");
printf("Pragma: no-cache\n");
printf("\n");
при сохранении файла :\ в частности бинарного
Это для того чтобы Apache не выдавал "Internal error", вобщем в данном коде вроде больше нагрузки не несет.
$ man 3 fgetc
If the stream is at end-of-file or a read error occurs, the routines return EOF. The routines feof(3) and and ferror(3) must be used to distinguish between end-of-file and error.
Прописал feof в коде и ferror, оказалось при загрузке картинки браузер присылает только первых +-50 байтов :-0
А как же взять остальную часть картинки?
PS: ferror выдает 0.
Написал я эту програмку, вот выкладываю решение моей проблемы на случай если ктото сюда попадет в своих поисках.
Вся проблема в том что данные из стандартного потока ввода читаются в текстовом режиме, некоторые байты поэтому искажаются и принимаются как управляющие. Все было бы просто если бы
нужно было читать из файла(переоткрыть файл делов то), но так как стандартный поток ввода уже открыт, его необходимо перевести в бинарный режим чтения не закрывая.
Вот функция(работает в Microsoft Visual C++ 6.0, в досовском С++ вроде такая тоже есть но без нижнего подчеркивания), которая в данном случае переводит стандартный поток ввода в бинарный режим чтения:
_setmode(_fileno(stdin),_O_BINARY); //(хочу заметить что найти нужную функцию в инете почемуто оказалось нелегко)
После того как stdin переведен в бинарный режим остается дело техники - разобрать данные POST запроса.
Вот моя програмка(скомпилировать в Microsoft Visual C++ 6.0 как консольное приложение и положить в папку cgi на веб сервере) по загрузке 4-х файлов.
PS: не совсем сохранились сдвиги в коде:(