1

我来自下面 voicexml 的帖子作为我的 php 脚本到达

$ _POST['SOURCEADDR'] & $ _POST['recMsg']

我必须在我的服务器配置上做些什么来启用$_FILES[]吗?当我从 html 网页发布时,我的相同脚本可以正常工作。

<form id="record">
<record name="recMsg" beep="true" maxtime="120s" finalsilence="5000ms" dtmfterm="true" type="audio/basic">
<prompt>
<audio src="sounds/RECORD_AFTER_BEEP.au"/><audio src="sounds/COMEDY_WARRANT.au"/>
</prompt>
<noinput>
<audio src="sounds/NOTHING_RECORDED.au"/>
</noinput>
<filled>
<submit next="saveRecording.php" namelist="SOURCEADDR recMsg" method="post" enctype="multipart/form-data"/>
</filled>
</record>
</form>

====== PHP Script =====
<?
if ($_FILES){
$ftype = $_FILES["recMsg"]["type"];
$fsize = $_FILES["recMsg"]["size"];
$ftemp = $_FILES["recMsg"]["tmp_name"];
$phone = $_REQUEST["SOURCEADDR"];
$fname = "rec_".$phone."_".date("Ymdgis").".au"; //$_FILES['recMsg']['name'];
flog("debug.log", "Got: $ftype | $fsize | $phone | $fname");
}else{
$out = flog("debug.log", "no $ _FILES array");
echo '<?xml version="1.0" encoding="ISO-8859-1"?><vxml version="2.0"><form id="main">
<block>'.'ERROR POST'.'</block></form></vxml>';
exit;
}
?>
4

1 回答 1

1

您在 VoiceXML 中指定将使用哪种类型的 HTTP 请求将录制的音频发送到服务器。

<submit expr=example.php method="post" namelist="rec" enctype="multipart/form-data"/>

这是将音频文件发送到服务器的典型方法。您没有在服务器上指定如何发送音频。

在这篇Voxeo 文章中,有一个关于在使用这种类型的提交时如何在 PHP 中检索音频的示例。查看页面底部的 PHP 示例。这是示例代码。

<?PHP
header('Cache-Control: no-cache');

error_reporting (0);

echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
echo "<vxml version=\"2.0\">";

echo "<form id=\"main\">";
echo "<block>";

if ($HTTP_POST_FILES) {
  foreach ($HTTP_POST_FILES as $key => $value) {
    foreach ($value as $Filename) {

      if (strpos($Filename, "WINNT")) { $ServerSide = $Filename; }
      if (strpos($Filename, ".wav"))  { $ClientSide = $Filename; }
    }  // for each statement

    $ServerSide = str_replace("\\\\", "/", $ServerSide);

    if (!copy($ServerSide, "c:/audio-storage/temp.wav")) {
      echo "Could not save filename: " . $ServerSide;
    } // if statement
    else {
      echo "Successfully saved filename: " . $ServerSide;
    }  // else statement

  }  // for each statement
}  // if statement

echo "</block>";
echo "</form>";
echo "</vxml>";
?>

根据 Voxeo 的这个示例,它应该返回一种 HTTP_POST_FILES,而不是 _FILES[]。HTTP_POST_FILES 是通过 HTTP POST 方法上传到当前脚本的项目的关联数组。

于 2013-09-25T19:34:24.993 回答