所以我有一段代码,我正在尝试下载正在运行的REST API运行的音频文件,它的周围环境如下:
elseif($method == 'synthTTS'){
//check if all required parameters are accounted for
checkParameters($data, array('message'));
$message = $data['message'];
$message = str_replace(' ', '+', $message);
$url = "http://tts-api.com/tts.mp3?q=" . $message;
$path = "tts-mp3/" . str_replace('+', '', $message) . ".mp3";
// saveUrl($url, $path);
echo $url . "\n" . $path . "\n";
$file = file_get_contents($url);
file_put_contents($path, $file);
exit("Successfully synthesized TTS to " . $path);
}
我将此“hello world”作为message参数传递,echo显示预期的$ path和$ url值(分别为“tts-mp3 / helloworld.mp3”和“http://tts-api.com/tts.mp3?q=hello+world”)。但是,当我休息这个'功能'时,没有文件被保存。在我这样做之后,我在PHP交互式shell中运行了file_get_contents
行和file_put_contents
行。
$ php -a
Interactive shell
php > $file = file_get_contents("http://tts-api.com/tts.mp3?q=hello+world");
php > file_put_contents("tts-mp3/helloworld.mp3", $file);
这很好用。我认为这很奇怪,为了进一步测试,我将这两行代码与硬编码的$ path和$ url一起放回到REST脚本中,但它仍无法正常工作。因此,作为最终测试,我将这两行复制/粘贴到一个新的PHP脚本中并运行它。有效。所以我的问题是“为什么相同的代码在两个不同的脚本中完全不同?”
我在PHP版本5.3和5.4中尝试过这段代码。
编辑:所以我尝试将代码移出包含所有REST函数的if块,并将其放在我的include / require语句的右上方,并且它有效。所以我一次将它移动一行,直到它坏了。
//include all the necessary external libraries
include_once 'ses.php'; //for sending emails of AWS
include_once 'sns.php'; //for the notification service of AWS
include_once 'sqs.php'; //for the queueing service of AWS
include_once 'gearman-client.php'; //for sending jobs to gearman workers
include_once 'vendor/rmccue/requests/library/Requests.php'; //for making web requests
include_once 'twitter-api-php/TwitterAPIExchange.php'; //for using the Twitter API
Requests::register_autoloader();
//IT WORKS IF I PUT THE CODE HERE
//initialize twitter settings
$settings = array(
'oauth_access_token' => "YOUR_OAUTH_ACCESS_TOKEN",
'oauth_access_token_secret' => "YOUR_OAUTH_ACCESS_TOKEN_SECRET",
'consumer_key' => "YOUR_CONSUMER_KEY",
'consumer_secret' => "YOUR_CONSUMER_SECRET"
);
//BUT NOT IF I PUT IT HERE
我把它移到了设置数组的定义之后(我还没有完成)并且它已经破坏了。奇怪的是,当我注释掉$ settings定义时(代码仍然在它之后)它仍然没有用。