За последние 24 часа нас посетили 61003 программиста и 1766 роботов. Сейчас ищут 890 программистов ...

Взаиммодействие с другим сервером

Тема в разделе "PHP для новичков", создана пользователем velocat, 4 июл 2009.

  1. velocat

    velocat Активный пользователь

    С нами с:
    19 янв 2008
    Сообщения:
    32
    Симпатии:
    0
    Возникла такая задача:

    Есть сторонний сайт с файлами (на нем разрешена как авторизованная загрузка, так и гостевая)

    Мне нужно интегрировать процесс загрузки и скачивания на своём сайте, т.к. эти файлы будут лишь частью формы.

    Внедряя скопированную форму загрузки не получаю результата, т.к. на внешнем сайте как я понимаю, в форме используются Куки.

    Указывая ссылку на скачивание, также не получаю результата. Скачивание происходит только если я авторизован на внешнем сайте. Иначе просто перекидывает на главную страницу.

    ТОлько начал осваивать CURL и понимаю, что в принципе можно залогинится на том сайте, и скачать или закачать файл.
    Но! получится, что любой пользователь скачивающий файл окажется залогиненым под каким-то введёным мной аккаунтом. Скачивание должно быть доступно для всех моих пользователей.

    Как добиться того, чтобы на время скачивания-закачивания пользователь был авторизован под специально установленным мной аккаунтом, а после прекращения соединения он разлогинивался там, и не мог например изменить информацию (пароль, имя и т.п.)

    И соответственно, как это реализовать, если два и более пользователя осуществляют взаимодействие с внешним сайтом.

    Буду признателен за любые наводки, подсказки и тем более примеры.
    Если необходимы подробности, сообщу ссылку на страницу, где это хочу использовать. ( в ЛС )
     
  2. velocat

    velocat Активный пользователь

    С нами с:
    19 янв 2008
    Сообщения:
    32
    Симпатии:
    0
    Вопрос со скачиванием решил.

    Остается следующий вопрос (по загрузке файла на сторонний сервер):

    Есть форма, в ней поля есть для загружаемого файла и для информации на моём сервере.

    HTML:
    1. <form name="post" method="post" action="action.php">
    2.   <input type="text" name="filename" value="" id="filename"  />
    3.   <textarea name="fileDescription"></textarea>
    4.   <input type="text" name="websiteUrl" value="http://" id="websiteUrl"  />
    5.   <input type="checkbox" name="trackTypes" value="geocaching" id="geocaching"  />
    6.   <input type="checkbox" name="trackTypes" value="miscellaneous" id="miscellaneous"  />
    7.  
    8.  <input type="file" name="formFile" value="" />
    9.  
    10.  <input name="submit" type="submit" value="SUBMIT" />
    11. </form>
    action.php
    PHP:
    1.  <?
    2.  
    3. //Авторизация
    4.  
    5. $curl=curl_init("http://www.gpsies.com/login.do?username=vasya&password=PaSsWoRd");
    6. curl_setopt ( $curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT'] );
    7. curl_setopt ( $curl, CURLOPT_HEADER,0);
    8. curl_setopt ( $curl, CURLOPT_NOBODY,0);
    9. curl_exec ($curl);
    10. curl_close($curl);
    11.  
    12. // Загружаю файл и некоторые данные на сторонний сервер
    13.  
    14.  $fields = array("file" => "@".$_POST['file'], "fileDescription" => $_POST['fileDescription'], "websiteUrl" => $_POST['websiteUrl'], "trackTypes" => $_POST['trackTypes']);
    15.  
    16.  $curl = curl_init ("http://www.gpsies.com/upload.do=send");
    17.  
    18.  curl_setopt ($curl, CURLOPT_POST, true);
    19.  curl_setopt ($curl, CURLOPT_POSTFIELDS, $fields);
    20.  
    21. // Как получить данные о процессе загрузки, чтобы установить например progress bar ?
    22.  
    23.  if(curl_exec($curl)) {
    24.      echo "Файл загружен успешно\r\n";
    25.  } else {
    26.      echo "При загрузке файла произошла ошибка\r\n"
    27.  }
    28.  
    29.  curl_close($curl);
    30.  
    31. // Закрываю авторизацию
    32. $curl=curl_init("http://www.gpsies.com/login.do?logout=true");
    33. curl_setopt ( $curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT'] );
    34. curl_setopt ( $curl, CURLOPT_HEADER,0);
    35. curl_setopt ( $curl, CURLOPT_NOBODY,0);
    36. curl_exec ($curl);
    37. curl_close($curl);
    38.  
    39.  
    40. $file_data = // ARRAY - Как получить данные загруженного файла (например url) ?
    41.  
    42. set_to_databasa ($fields, $file_data); // Загружаю данные на свой сервер (не привожу тут код этой ф-ции)
    43.  
    44.  ?>
    Описал необходимое в коде.
    Повторюсь:
    1. Самое главное получить УРЛ загруженного файла, чтобы внести его в БД,
    2. А также получить некоторые значения.
    (значения просчитываются внешним сервером и доступны после загрузки на странице просмотра - например дата, скорость и т.п., т.е. их нет в файле, они просчитываются сторонним скриптом).
    3. Как сделать так, чтобы несколько пользователей, одновременно загружающие свои файлы, могли сделать это? Авторизация же одна (Специальный аккаунт на внешнем принимающем сервере).
    4. Необязательное украшательство, но полезное - Пока файл загружается сделать некий IMG -> Progress Bar
    Буду очень благодарен за помощь.

    PS PHP-код пока не проверял, не хочется терроризировать чужой сервер своими экспериментами :roll:
     
  3. velocat

    velocat Активный пользователь

    С нами с:
    19 янв 2008
    Сообщения:
    32
    Симпатии:
    0
    Может кто нить всё же подскажет?

    Как получить после отправки формы CURL-ом
    URL страницы, на которую редиректится эта форма после отправки на том сайте?
     
  4. velocat

    velocat Активный пользователь

    С нами с:
    19 янв 2008
    Сообщения:
    32
    Симпатии:
    0
    Продолжаю свои мытарства....

    Если беру html форму, и в action указываю урл загрузчика, всё прекрасно загружается.

    Если проделываю всё тоже самое, но в action формы указана ссылка на скрипт с Курлом, в котором соответствнно инициализация происходит на загрузчик формы, то результата нет.

    В чём может быть проблема?

    И подскажите, как с помощью Курла получить ответ об ошибке выдаваемой загрузчиком.
    Т.е. в моей форме, например неправильно внесены поля пользователем, отправляю форму курлом, а обработчик находит то что поля не внесены, Я же получаю ответ, что всё в порядке (от Курла), хотя загрузка и не произведена, и обработчик ожидает изменения неправильно введеной информации.
    Понимаю, что проще всего установить аналогичные проверки на моей форме, но в данный момент это помогло бы отловить ошибку - почему не происходит загрузка.