|
Страници по тази тема: 1 | 2 | 3 | (покажи всички)
Тема
|
Двоични данни към сървъра (octet-bynary)
|
|
Автор | :) (Нерегистриран) |
Публикувано | 14.12.06 21:10 |
|
Искам да изпратя от браузъра към сървъра двоични octet-stream данни (за проба, с някаква бъдеща цел)
В примера по долу, когато използвам Content-Type=application/x-www-form-urlencoded всичко е ОК - резултат >11111<. Когато използвам Content-Type=application/octet-stream - резултата е ><. Параметрите които трябва да POST-вам са двоични и мисля, че трябва да използвам Content-Type=application/octet-stream.
Моля, кайете къде греша!
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
</head>
<body>
<p>
<script language="javascript">
<!--
var http_request = false;
if (window.XMLHttpRequest) { // Mozilla, Safari,...
http_request = new XMLHttpRequest();
if (http_request.overrideMimeType) {
http_request.overrideMimeType('text/plain/xml');
}
} else if (window.ActiveXObject) { // IE
try {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
function addComment(comment){
if (!http_request){
alert('Не може да определи инстанцията за съответния браузър');
return false;
}
http_request.open('POST', 'comments.php', true);
http_request.setRequestHeader('Content-Type','application/octet-stream');
// http_request.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
http_request.onreadystatechange = sendCom;
http_request.send("action=add&comment="+comment);
function sendCom(){
if (http_request.readyState == 4) {
if (http_request.status == 200){
if (http_request.responseText==comment)
alert(comment);
else
alert('>'+http_request.responseText+'<');
} else {
alert('Има проблем със заявката!');
}
}
}
}
-->
</script>
<input type="button" name="Button" value="Button" onclick="addComment(11111)"/>
</p>
<div id="message"></div>
</body>
</html>
а това е пхп-то:
<?php
if(isset($_POST['comment'])){
$param = $_POST['comment'];
echo ($param);
}
?>
| |
Тема
|
Re: Двоични данни към сървъра (octet-bynary)
[re: :)]
|
|
Автор | Vasko (Нерегистриран) |
Публикувано | 15.12.06 10:59 |
|
az ne vijdam ni6to dvoi4no da pra6ta6
| |
Тема
|
Така е или защото аз не разбирам, или защото ти не
[re: Vasko]
|
|
Автор | :) (Нерегистриран) |
Публикувано | 15.12.06 14:11 |
|
Така е или защото аз не разбирам, или защото ти не разбираш :)
Виж, аз не съм сигурен, как се изпращат двоични данни, но предполагам, че и един стринг, изпратен по подходящ начин, може да се интерпретира като двоични данни.
Та мисълта ми беше, първо да успея да прехвърля стринг, като двоични данни, а след това да се пуйча :)
| |
Тема
|
Re: Двоични данни към сървъра (octet-bynary)
[re: :)]
|
|
Автор | Penguin (Нерегистриран) |
Публикувано | 16.12.06 04:49 |
|
Ако данните ти са octet/binary, то няма как PHP-тo ги раздели по променливи и да напълни $_POST масива. Така че е съвсем очаквано масива да е празен :-)
| |
Тема
|
Логично е, и как се постъпва в такъв случей?
[re: Penguin]
|
|
Автор | :) (Нерегистриран) |
Публикувано | 16.12.06 12:17 |
|
Логично е, и как се постъпва в такъв случей?
Може би има механизъм за работа със стриймове, без да се ползват файлове?
| |
Тема
|
Re: Двоични данни към сървъра (octet-bynary)
[re: :)]
|
|
Автор |
edembg (Ученик) |
Публикувано | 16.12.06 13:15 |
|
Мисля, че броузерите имат защита и не изпълняват форми с Content-Type=application/octet-stream. Мисля, че може да изпратиш нужните ти данни като масив или обект, предварително сериализиран. Има javascript сериализатори. Потърси и пробвай с такъв.
Бух ти препоръчал да изтеглиш това: http://pear.php.net/package/HTML_AJAX
Има добри примери.
Успех
И най-ярките личности си плащат тока.
| |
Тема
|
Re: Логично е, и как се постъпва в такъв случей?
[re: :)]
|
|
Автор | Penguin (Нерегистриран) |
Публикувано | 16.12.06 21:44 |
|
Според мен ако ползваш application/octet-stream, то трябва сам да си парсваш данните. Предполагаш че $HTTP_RAW_POST_DATA е инициализирана, така че си я раздели сам на променливи.
| |
Тема
|
Re: Двоични данни към сървъра (octet-bynary)
[re: :)]
|
|
Автор | pkostov (Нерегистриран) |
Публикувано | 17.12.06 00:50 |
|
Pravilniat header e : multipart/form-data
Zashtoto izpashtash razlitchni vidove informatzii kqm servera ... Povetche informatzii na tozi adres :
http://www.php.net/manual/en/features.file-upload.php#features.file-upload.post-method
| |
Тема
|
Re: Двоични данни към сървъра (octet-bynary)
[re: pkostov]
|
|
Автор |
edembg (Ученик) |
Публикувано | 17.12.06 10:05 |
|
AJAX технологията не позволява file upload от съображения за сигурност. Няма начин да се премахне зщитата с javascript.
По принцип си прав, но с AJAX трябва да се ползват трикове. Най-разпространеният е да се направи форма в iframe и да се submit-ва като обикновена форма.
И най-ярките личности си плащат тока.
| |
Тема
|
Re: Логично е, и как се постъпва в такъв случей?
[re: Penguin]
|
|
Автор |
VCG (:)) |
Публикувано | 17.12.06 17:03 |
|
За да използвам $HTTP_RAW_POST_DATA ми се наложи да променя php.ini: always_populate_raw_post_data = On (може и да е грешка?).
Когато се използва application/octet-stream - $HTTP_RAW_POST_DATA е инициализирана, но като използвам multipart/form-data не е.
Използвам примера от темата но с JS изпращам:
http_request.send(0x20+0x41).
PHP-то ми е : <?
if (isset($GLOBALS['HTTP_RAW_POST_DATA'])){
$theinfo= $GLOBALS['HTTP_RAW_POST_DATA'];
echo ($theinfo);
} else {
echo 'No';
}
?>
резултата е 97, а аз очаквам "празно място"+"а".
Явно, JS не сумира като стрингове кодовете на символите.
Как да си тествам примера?
| |
|
Страници по тази тема: 1 | 2 | 3 | (покажи всички)
|
|
|