Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.04.2009, 19:53   #1
krok
Клонирую людей
Пользователь
 
Аватар для krok
 
Регистрация: 22.02.2008
Сообщений: 22
Восклицание fsockopen - одновременное использывание

Приветствую! Есть функция:

PHP код:
function getSocketContent($url)
{
    
$_socket fsockopen("xxx" ,80);

    
$_request_headers  'GET ' "$url";
    
$_request_headers .= " HTTP/1.0\r\n";

    if (!empty(
$_SERVER['HTTP_USER_AGENT'])) $_request_headers .='User-Agent: ' $_SERVER['HTTP_USER_AGENT'] . "\r\n";
    if (!empty(
$_SERVER['HTTP_ACCEPT'])) $_request_headers .= 'Accept: ' $_SERVER['HTTP_ACCEPT'] . "\r\n";
        else 
$_request_headers .= "Accept: */*;q=0.1\r\n";
    
$_request_headers .= 'Referer: ' $_SESSION['uref'] . "\r\n";
    
$_request_headers .= "\r\n";

    
fwrite($_socket$_request_headers);
    
$_response_headers $_response_keys = array();

    
$line fgets($_socket8192);
    while (
strspn($line"\r\n") !== strlen($line))
    {
        @list(
$name$value) = explode(':'$line2);
        
$name trim($name);
        
$_response_headers[strtolower($name)][] = trim($value);
        
$_response_keys[strtolower($name)] = $name;
        
$line fgets($_socket8192);
    }

    
$content '';
    do
    {
        
$data fread($_socket8192);
        
$content .= $data;
    }
    while (!empty(
$data));

    
fclose($_socket);

    return 
$content;

когда она работает с одним пользователем все прекрасно, но когда начинают работать сразу несколько юзеров, начинаются глюки, а именно открывает не тот улр., урл другого юзера. В чем проблема? Кстати уточню что эта функция запускается в цикле с рандомной задержкой 7-13 сек.
В мире нет Вечных Двигателей, зато полно Вечных Тормозов.
krok вне форума Ответить с цитированием
Старый 08.04.2009, 22:41   #2
Stanislav
Квадрокоптерист
Участник клуба Подтвердите свой е-майл
 
Регистрация: 29.09.2007
Сообщений: 1,824
По умолчанию

насколько мне известно необходимо заблокировать временно, файл в который пишите, а после записи разблокировать, т.е другой не сможет в него записать пока он не отработает у предыдущего... вот небольшой примерчик,


Код:
<?php
$f=fopen("ins.dat","a+");
flock($f,LOCK_EX);
$count=fread($f,100);
@$count++;
ftruncate($f,0);
fwrite($f,$count);
fflush($f);
flock($f,LOCK_UN);
fclose($f);
?>
Я часть той силы, что вечно хочет зла, но вечно совершает благо..
Stanislav вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Одновременное удаление записей в разных таблицах Lkhasa БД в Delphi 9 16.12.2010 13:21
Одновременное подключение к БД Access XATAB БД в Delphi 7 12.08.2010 09:33
Одновременное нажатие клавиш. Вадим Буренков Gamedev - cоздание игр: Unity, OpenGL, DirectX 11 08.04.2009 18:17
одновременное нажатие нескольких кнопок DANIЯR Общие вопросы Delphi 8 27.11.2008 21:47
ограничить одновременное скачивание ILoveKS PHP 3 14.05.2008 20:59