我的php通過socket 接收服務端傳過來的資料, 我看長度和server端傳過來的位元組數是相等的, 但是就是輸出不全, 我通過htmlentities 輸出的, 難道網頁位元組數還有限制麼? 每次提交查詢返回結果, 輸出的資訊總是少一些, 還不一定少多少, 比如第一次少1000多個位元組, 下次有可能少2000個這樣 該怎麼解決呢?
我在php+apache環境下實驗就正常, 用的xampp. 在linux環境, nginx+php+php-fpm就不行, 輸出不全,是什麼地方設定有問題麼?
回複討論(解決方案)
有人能指教下是什麼問題麼?
既不知道你在做什麼,也不知道你是怎麼做的
這樣沒頭沒腦的問題,讓人如何解答?
一個php網頁, 通過HTML網頁的form, post給php代碼, 然後通過socket發送一個請求資訊給server端, server端接收到資訊後, 產生一堆資料, 二進位的, 然後發送給php端, php端接收資料, php在接收資料後, 調用了strlen 測試了一下訊息體的長度, 和server端發送的包長度是一樣的, 然後在網頁上顯示出來, 就這樣一個過程, 我在webserver為apche的情況下, 測試了一下, 接收是對的, 我用的是xampp. 就是在 nginx+php+php-fpm這種環境下接收後列印輸出資訊不全. 同樣的代碼, 目前不知道是什麼情況...
也沒看懂怎麼回事。
但form傳值不可能大到網頁都要限制,你試下不用htmlentities輸出呢,每一步都打出結果來看一下原始碼,如果有特殊字元被解析了。
之前遇到過在處理json時有window和linux字元多少不一樣的問題,但也就是開頭幾個字元,截取就行了。
echo htmlentities($data[$i],ENT_NOQUOTES,"utf-8")."
"; 我是用這個輸出的, 可每次都輸出一部分, 而且有時多有時少... 不知道怎麼回事 開頭的4個位元組的整形資料我已經解析出來了, 然後後面全是二進位字串,是包括中文的xml資料集合. 關鍵我現在找不到原因, 我在本地用xampp測試全部正常, 只有放到linux伺服器上出錯... 沒有頭緒
既然是 php在接收資料後, 調用了strlen 測試了一下訊息體的長度, 和server端發送的包長度是一樣的
確認一下,兩個伺服器環境下長度都是一樣的嗎?
那麼問題就出在顯示上了
是的 3太伺服器都是這樣 是配置問題還是什麼地方的問題. 現在就是不好解決 不曉得各位是否遇到過..
如果資料不是很長的話,你可貼出資料的base64編碼,以便分析原因
剛剛我截取的資料片段 我測試了一下 可以全部顯示出來... 到底該怎麼解決呢 多謝
這是一個 XML 字串,雖然所有
但是其中的中文是 GBK 編碼的(至少你給的這部分是)
你應該檢查輸出時的處理代碼
我處理了.... 呵呵 如下 :
$recv_res = iconv("gbk", "utf-8", $recv_res);
然後echo的時候 做的echo htmlentities($data[$i],ENT_NOQUOTES,"utf-8")."
";
我就懷疑 是不是什麼地方限制了位元組數的輸出.....
能再幫我想想麼 多謝 我還沒解決呀...
誰能指教下麼?
就這麼 $recv_res = iconv("gbk", "utf-8", $recv_res); 是可以的嗎?
如果它其中的某個成員就是 utf-8 的呢?不就亂套了嗎?
貼代碼
可是我在apache+php+mysql環境下是正常的.. 都能輸出, 而且我把資料量減少, 也能完整輸出.. 我覺得不是字元編碼的問題, 而且寫來源資料的時候就已經指定字元編碼為gbk的了, 接收的話應該也是這個
有人知道原因麼?
有人能告知下原因麼 多謝
如果你用的是Nginx,可以查看下是否是Nginx開啟反向 Proxy導致反向 Proxytmp目錄緩衝沒有許可權或者緩衝過小導致。