У меня есть php-файл, где у меня есть код API. Этот файл использует твиттер API, в файле я передаю ключи пользователя через сеансы для обработки и отправки твита.
Мне интересно, что произойдет, если несколько запросов приходят к этому файлу в одну секунду?
Если в файл поступает 5 запросов из разных географических мест … каждый с разными значениями переменных … но все будут принимать одинаковые имена переменных … создает ли php 5 экземпляров этого файла для выполнения твитов?
Пожалуйста, посмотрите мой код, чтобы увидеть, что происходит: http://pastebin.com/ic6pYLgi
Что произойдет, если несколько человек отправляют запросы в этот файл?
<?php
session_start();
//pass session variables into standard variable
$ck = $_SESSION['consumer_key'];
$cs = $_SESSION['consumer_secret'];
$at = $_SESSION['access_token'];
$ats = $_SESSION['access_token_secret'];
$hashtag = $_SESSION['hashtag'];
$tweet = $_POST['tweet'];
//TODO unset session at end of script
//TODO limit tweet length
if (!empty($ck && $cs && $at && $ats && $tweet)){
$ck = $_POST['consumer_key'] = $ck; //get session value into POST then pass back to variable
$cs = $_POST['consumer_secret'] = $cs;
$at = $_POST['access_token'] = $at;
$ats = $_POST['access_token_secret'] = $ats;
$_POST['tweet'];
$hashtag = $_POST['hashtag'] = $hashtag;
}require "autoload.php";
use Abraham\TwitterOAuth\TwitterOAuth;
define('CONSUMER_KEY', $ck); // add app consumer key between single quotes
define('CONSUMER_SECRET', $cs); // add app consumer secret key between single quotes
$access_token = $at;
$access_token_secret = $ats;
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $access_token, $access_token_secret);
if (!empty($ck && $cs && $at && $ats && $tweet && $hashtag)) {
$hashtag = '#' . $hashtag;
$connection->post('statuses/update',array('status' => $tweet . ' ' . $hashtag));
$t = $connection;
echo '<pre>';
//print_r($t);
echo '</pre>';
echo "Your message has been sent to Twitter with a hashtag.";
}
//TODO Add error handling to send to special inbox//Tweet without hashtags
if (!empty($ck && $cs && $at && $ats && $tweet) && empty($hashtag)) {
$connection->post('statuses/update',array('status' => $tweet));
//$t = $connection;
//echo '<pre>';
//print_r($t);
//echo '</pre>';
//echo "Your message has been sent to Twitter without a hashtag.";
}
session_destroy(); //this will hopefully help with load on this file
?>
Любые переменные в php-запросе не зависят от каких-либо одновременных запросов, поэтому некоторые другие обрабатываемые запросы никоим образом не будут вносить изменения в ваши переменные.
$ _SESSION var будет содержать копию общей области сеанса. Копия выполняется один раз во время вызова session_start (), и даже если обрабатываются другие одновременные страницы, они не будут иметь никакого значения для содержимого вашей $ _SESSION
Возможно, у вас не будет одновременной обработки. Насколько я понимаю, PHP не может обрабатывать больше страниц одновременно, чем процессоров на сервере. Если у вас сервер с одним процессором, одновременная обработка страниц не выполняется, запрос на страницу, который поступает во время обработки другого, ожидает в очереди.
Других решений пока нет …