2011-11-20 3 views
0

바이너리 파일 (비디오 또는 이미지 파일 일 수 있음)을 쓰는 PHP 프로그램을 작성하고 있습니다. 나는바이너리 모드 쓰기

<?php 
$fileChunk = $_POST["filechunk"]; 
$vodFolder = 'D:\\HYSA SVN\\Trunk\\workproducts\\source\\hysa_he\\web\\entertainment\\'; 
$vodFile = $vodFolder . "abcd.mov"; 
$fh = fopen($vodFile, 'ab'); 

flock ($fh, LOCK_EX); 
$varsize = fwrite($fh, $fileChunk); 
fclose($fh); 
?> 

를 웹 서비스로 만들어

내 코드는 아래에 제공되는 등의 C# 등의 다른 응용 프로그램, 맥에서 전화를 좋아하지만 것이다 나는 교류 #에서 PHP 웹 서비스를 호출 할 때 코드에서 abcd.mov가 위치에 생성되지만 크기는 단지 1kb입니다. 필자는 바이너리 파일에 문자 '&'이 발견되면 쓰기가 중단되었다고 생각합니다. 나는 PHP 문서를 읽고 그것을 발견, 바이너리 모드 'b'와 함께이 문제를 해결할 것입니다 fopen? 하지만 작동하지 않습니다. 누군가 나를 도울 수 있습니까?

이것은 내 C# 코드입니다.

BinaryReader b = new BinaryReader(File.Open("d:\\image38kb.jpg", FileMode.Open)); 
int pos = 0; 
int length = (int)b.BaseStream.Length; 
byte[] bt = b.ReadBytes(length); 

char[] ch = b.ReadChars(length); 


HttpWebRequest request = null; 
Uri uri = new Uri("http://d0327/streamtest.php"); 
request = (HttpWebRequest)WebRequest.Create(uri); 
NetworkCredential obj = new NetworkCredential("shihab.kb", 
      "India456*", "tvm"); 
request.Proxy.Credentials = obj; 

request.Method = "POST"; 
request.ContentType = "application/x-www-form-urlencoded"; 
request.ContentLength = bt.Length; 
using (Stream writeStream = request.GetRequestStream()) 
{ 
UTF8Encoding encoding = new UTF8Encoding(); 
byte[] bytes = encoding.GetBytes("filechunk="); 
byte[] rv = new byte[bytes.Length + bt.Length]; 

System.Buffer.BlockCopy(bytes, 0, rv, 0, bytes.Length); 
System.Buffer.BlockCopy(bt, 0, rv, bytes.Length, bt.Length); 

writeStream.Write(rv, 0, bt.Length); 
} 

string result = string.Empty; 
using (
HttpWebResponse response = (HttpWebResponse)request.GetResponse()) 
{ 
using (Stream responseStream = response.GetResponseStream()) 
{ 
    using (StreamReader readStream = new StreamReader(responseStream, Encoding.UTF8)) 
    { 
    result = readStream.ReadToEnd(); 
    } 
} 
} 

답변

0

문제는 잘 작동하는 fwrite 부분에 없습니다.

그러나, HTTP의 POST 요청은 다음과 같이 : 당신이 볼 수 있듯이

POST /somepage.php HTTP/1.1 
Content-Length: 34 

variable1=blah&var2=something else 

는 변수 (키뿐만 아니라 등호 (=) - 값의 매핑) 앰퍼샌드 (&)로 분할된다 ... 따라서 POST 요청을 사용하는 경우에도 앰퍼샌드는 안전 문자가 아닙니다.

이 문제를 해결하려면 TCP/IP 소켓 연결과 같은 다른 전송 방법을 시도하거나 ') with '\ x5C'...이 값들을 파싱하려면 PHP 코드를 편집해야합니다.

+0

답장을 보내 주셔서 감사합니다. '\ x26'을 사용하여 앰퍼샌드를 벗어나는 방법을 알려주고 '\ x5C'로 모든 역 슬래시()를 이스케이프 처리 할 수 ​​있습니까? – user867662