【问题标题】:PHP sleep() not workingPHP 睡眠()不工作
【发布时间】:2012-06-12 13:55:44
【问题描述】:

我正在制作一个 php 文件,它将在五分钟后运行一个事件。从文档来看,等待五分钟似乎只需要sleep(300),但这不起作用。我已经测试了所有其他代码,在我添加 sleep 行之前它工作正常。

<?php
/**
 * Twitter App
 * bagelBack.php
 * Takes parameters from $_POST and creates a tweet
 * RKoutnik, 2012
 * Code originally found on http://140dev.com/twitter-api-programming-tutorials/hello-twitter-oauth-php/
 */

$name = '@'.$_POST['twitterName'];
$type =  $_POST['bagelType'];

/* BEGIN CONTENT SPINNER TO IMPRESS LYNK */
$bagels = array(
    0 => "bagel",
    1 => "breakfast treat",
    2 => "doughy food-type item",
    3 => "round yeast-raised munchie",
    4 => "doughnut-shaped roll",
    5 => "hard-crusted treat"
);
$finished = array(
    0 => "finished toasting",
    1 => "completed toasting",
    2 => "stopped being raw",
    3 => "concluded the toasting phase",
    4 => "been sucessfully executed",
    5 => "been roasted to a crisp"
);

$food = $bagels[array_rand($bagels)];
$fin = $finished[array_rand($finished)];
sleep(300);
$tweet_text = $name.", Your ".$type." ".$food." has ".$fin;

$result = post_tweet($tweet_text);
echo "Response code: " . $result . "\n";

function post_tweet($tweet_text) {

  // Use Matt Harris' OAuth library to make the connection
  // This lives at: https://github.com/themattharris/tmhOAuth
  require_once('tmhOAuth.php');

  // Set the authorization values
  // In keeping with the OAuth tradition of maximum confusion, 
  // the names of some of these values are different from the Twitter Dev interface
  // user_token is called Access Token on the Dev site
  // user_secret is called Access Token Secret on the Dev site
  // The values here have asterisks to hide the true contents 
  // You need to use the actual values from Twitter
  $connection = new tmhOAuth(array(
    'consumer_key' => '[redacted]',
    'consumer_secret' => '[redacted]',
    'user_token' => '[redacted]',
    'user_secret' => '[redacted]',
    'curl_ssl_verifypeer'   => false
  )); 

  // Make the API call
  $connection->request('POST', 
    $connection->url('1/statuses/update'), 
    array('status' => $tweet_text)
  );

  return $connection->response['code'];
}
?> 

【问题讨论】:

  • 它不起作用是什么意思?当您调用 sleep() 时,PHP 脚本是否完全停止工作?它会睡觉,但不是五分钟吗?
  • 它根本不起作用。它不会像它应该的那样在 Twitter 上发布任何内容。
  • 你的 php.ini 中的 max_execution_time 是什么?可能脚本运行​​时间过长,因此在完成任何操作之前就已经存在。
  • 30 秒。是的,就是这样。谢谢,我不知道它存在!
  • 好吧,一方面,你的平台可能有一个不同的max_execution_time CLI 和 CGI​​/mod_php。 Ubuntu 的 PHP5 有 /etc/php5/cli/php.ini 和 /etc/php5/apache2/php.ini。但总的来说,环境会影响行为,因此信息越多越好。 (当然在合理范围内。)

标签: php sleep


【解决方案1】:

尝试在文档顶部添加set_time_limit(0);。它有可能达到“最大执行时间”并导致脚本终止。

【讨论】:

  • 这听起来可以解决问题,如果有效,我会在五分钟内通知您。
  • 太棒了!非常感谢。
  • 或者,set_time_limit(315);,或 300+,无论您预期的最大执行时间是多少。如果由于某种原因进程卡住了,最好不要意外耗尽你的进程表!
猜你喜欢
  • 2012-08-27
  • 1970-01-01
  • 2012-04-07
  • 1970-01-01
  • 2013-10-10
  • 1970-01-01
  • 1970-01-01
  • 2020-08-05
  • 2010-11-16
相关资源
最近更新 更多