如何使用套接字发布未知长度的内容?

时间:2014-01-07 15:52:32

标签: php

我在PHP CLI中使用谷歌语音识别api为我的覆盆子pi制作了一个程序,我想优化它,在我们讲话的同时发送数据(现在它记录了我们所说的感谢sox,然后发送它)。

所以我想在使用套接字时将音频文件发布到谷歌,但我必须在发送之前通过Content-Lenght给出长度。

是否可以这样做?不给长度/给出更大的最大长度?谢谢。这是我的代码:

<?php
header('Content-Type: text/html');

$name = 'www.google.com';
$dir = '/speech-api/v1/recognize?xjerr=1&client=chromium&lang=fr-FR&maxresults=10&pfilter=0';

$data = file_get_contents("/smart/voix.flac") ;

$envoi  = "POST ".$dir." HTTP/1.1\r\n";
$envoi .= "Host: ".$name."\r\n";
$envoi .= "Connection: Close\r\n";
$envoi .= "Content-Type:audio/x-flac;rate=44100\r\n";
$envoi .= "Content-Length: 100\r\n\r\n"; 

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if($socket < 0){
        die('FATAL ERROR: socket_create() : " '.socket_strerror($socket).' "');
}  

if (socket_connect($socket,gethostbyname($name),80) < 0){
        die('FATAL ERROR: socket_connect()');
}

if(($int = socket_write($socket, $envoi, strlen($envoi))) === false){ //I send the first part
        die('FATAL ERROR: socket_write() failed, '.$int.' characters written');
}
    if(($int = socket_write($socket, $data."\r\n", strlen($data."\r\n"))) === false){//then the file
        die('FATAL ERROR: socket_write() failed, '.$int.' characters written');
}

$reception = '';
while($buff = socket_read($socket, 2000)){
$reception.=$buff;
}
echo $reception;

socket_close($socket);
?>

1 个答案:

答案 0 :(得分:0)

你已经在做了:

$data = file_get_contents("/smart/voix.flac") ;

所以那时你必须有一个set文件。所以只是:

$filesize = filesize("/smart/voix.flac");

并将其用于Content-Length。