php
  • binary
  • 2011-11-20 154 views 0 likes 
    0

    我正在寫一個php程序來編寫一個二進制文件(可能是視頻或圖像文件)。我想,使其作爲一個Web服務,並從如C#另一個應用程序,MAC等叫它二進制模式寫作

    我的代碼如下給予,

    <?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); 
    ?> 
    

    但是,當我打電話從AC#PHP的Web服務代碼,abcd.mov正在創建該位置,但其大小隻有一個kb。我懷疑,當在二進制文件中發現一個字符'&'時,寫入停止。我閱讀了php文檔,發現用二進制模式打開'b'會解決這個問題嗎?但它不起作用。有人能幫助我嗎?

    這是我的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套接字連接,或者簡單地使用'\ x26'(&符號的ASCII值)轉義&,並轉義所有反斜槓(\ )與'\ x5C'...你必須編輯PHP代碼來解析這些值。

    +0

    感謝您的回覆。你能告訴我如何用&'x26'來跳過&符號,並用'\ x5C'來跳過所有的反斜槓() – user867662

    相關問題