Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > считывание файла с сайта с последующей записью


Автор: supervladislav 28.12.2011, 20:51
Скажите пожалуйста есть скрипт ,который переливает jpeg файлы с одного сайта на другой подскажите почему может не происходить
считывание ,файл существует ,проверял , если просто ввести его в  fopen он считывается  ,но скрипт всёвремя пишет мне 
failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in  
с чем это может быть связано )))

Код

$fp = fopen("http://adress/photo/".$data,"r");



Код

chdir(/home/path/www/);
$fp = fopen("http://adress/photo/".$data,"r");

        $fl = fopen("pics/".$data,"w");

        $fl2 = fopen($relative_barbos."pics/".$data,"w");

        
        while (true) {
     
          $datas = fread($fp, 4096);
         
#          print strlen($datas)."=";

          if (strlen($datas) == 0) { break; }

          fputs($fl,$datas);

          fputs($fl2,$datas);

        }

        fclose($fp);

        fclose($fl);

        fclose($fl2);

Автор: $дмитрий 28.12.2011, 21:17
Запрашиваемый файл точно существует. Прям 100% ? А почему отсутствует флаг b?
Я обычно файлы дергаю через сокеты, подобных проблем нет

Автор: supervladislav 28.12.2011, 21:21
$дмитрий, флаг b только при считывании???
Непонимаю как раньше работало ???

Добавлено через 8 минут и 25 секунд
$дмитрий, поставил - непомогло

Автор: $дмитрий 29.12.2011, 08:00
Тебе проще скопировать файлы в ручную

Автор: s0lman 29.12.2011, 10:01
В пхп установлена опция allow_url_fopen ?

Автор: supervladislav 29.12.2011, 13:43
$дмитрий, так в том то и дело ,что не проще )))

Автор: supervladislav 29.12.2011, 14:03
s0lman, она включена в On ,остальные то сценарии работают.
Включил настройку  в .htaccess файле . 



Автор: supervladislav 29.12.2011, 14:39
Народ минутку сама загрузка файлов работает ,я загружаю файл такой же командой точно такойже ,
но когда речь идёт о сценарии ,то мне на вполне существующий файл который грузится  точно через такую функцию fopen 
отвечает мне вот так http
HTTP/1.1 404 Not Found 

Автор: $дмитрий 29.12.2011, 15:25
Цитата

сама загрузка файлов работает

Так а в чем проблема?

Автор: supervladislav 29.12.2011, 16:12
$дмитрий, проблема в том ,что если я делаю вот так
 
Код

$link=fopen("http://adress/photo/150_1030_17311.jpg","rb");
while($data1=fread($link,4096)){
echo $data1;
fclose($link);
}


мне в echo выдаётся каляка моляка 
,когда я в свой скрипт добавляю 

Код

var_dump($datas);

там выдаётся false 

Автор: supervladislav 29.12.2011, 18:22
$дмитрий,проблема в том ,что сценарий выполняется только вот до этого места 
Код

  if ($data<>"_") {
  $fp = fopen("http://adress/photo/".$data,"r");

в переменной $data есть название существующего файла ,в настройках всё что надо Для загрузки файла через fopen  прописано  ,а дальше сценарий не находит файл.
Файл загружается в случае если его просто прописать в fopen.
Если из скрипта выводит вот это:
Пишет вот это failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /home/u26156/arenda-spbru/www/db_photo.php on line 78





Код

foreach ($tables as $type=>$table) {

    $mysql = "SELECT * from $table where strPhotoIndex='_' or strPhotoIndex=' '  LIMIT 10;";

    $res = mysql_query($mysql);
    
    while ($row = mysql_fetch_array($res,MYSQL_ASSOC)) {
    
      $result = true;

      $total++;

      $recordid = $row['RecordID'];
     
     
      if (($fp = fopen("http://adress/import_photo.php?type=".$type."&id=".$recordid,"r")) === false) die();

      $data = fread($fp, 4096);

      fclose($fp);




      if ($data<>"_") {
      
    
      

        $fp = fopen("http://adress/photo/".$data,"r");

        $fl = fopen("pics/".$data,"w");

        $fl2 = fopen($relative_barbos."pics/".$data,"w");



        while (true) {

          $datas = fread($fp, 4096);

#          print strlen($datas)."=";

          if (strlen($datas) == 0) { break; }

          fputs($fl,$datas);

          fputs($fl2,$datas);

        }

        fclose($fp);

        fclose($fl);

        fclose($fl2);



        list($width, $height) = getimagesize("pics/".$data);

        $newwidth = 211;

        $newheight = ($height/$width)*$newwidth;

        $source = imagecreatefromjpeg("pics/".$data);

        if ( $newwidth == $width &&  $newheight == $height) {

          $result = imagejpeg($source,"pics/".substr_replace($data, 'T', 0, 1));

          $result &= imagejpeg($source,$relative_barbos."pics/".substr_replace($data, 'T', 0, 1));

        } else {

         $thumb = imagecreatetruecolor($newwidth, $newheight);

          $result = imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

          $result &= imagejpeg($thumb,"pics/".substr_replace($data, 'T', 0, 1));

          $result &= imagejpeg($source,$relative_barbos."pics/".substr_replace($data, 'T', 0, 1));

        }

      }
if($data<>"_" or $data<>" "){
      $mysql = "UPDATE $table set strPhotoIndex='".$data."' WHERE RecordID=".$row['RecordID'];

      $message.=$mysql."\n";

      if ($result) {

        $res0 = mysql_query($mysql);

      } else {

        $message.="ERROR RESIZING ".$data." FOR ID=".$row['RecordID']." !!\n";

        if ($errors++>5) break 2;



      }}

      if (array_key_exists('count',$_GET)) {

        if ($total>=$_GET['count']) {

          print "<pre>".$message."</pre>";

          die();

        }

      }

    }

  }

$дмитрий, 

Автор: $дмитрий 29.12.2011, 19:19
Цитата

в переменной $data есть название существующего файла

Откуда такая уверенность?

Автор: supervladislav 29.12.2011, 22:23
$дмитрий, проверял через var_dump

Автор: $дмитрий 29.12.2011, 22:53
Код

echo "http://adress/photo/".$data;


Что выводит?

Автор: supervladislav 30.12.2011, 01:53
$дмитрий, вот это  выводит ну все остальные ошибки связанные с тем ,что связаны с линком.
Warning: fopen(http://adress/photo/637_14269_16033.jpg ) [function.fopen]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in 

Автор: $дмитрий 30.12.2011, 11:02
http://arenda-spb.ru/photo/637_14269_16033.jpg
Но такого файла действительно нет  smile 

Автор: supervladislav 30.12.2011, 15:19
$дмитрий,я видимо не очень точно объяснил ,смотри скрипт лезит на сервер по внешнему ip 
и  загружает фотографию ,потом эту фотографию просто копирует на другой сайт тоесть сохраняет через fputs и всё.

Автор: supervladislav 3.1.2012, 22:10
Пробовал сделать вот так картинка прекрасно выводится )))
Warning: fopen(http://adress/photo/377_3647_11821.jpg ) [function.fopen]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /
как только дело доходит до вот этого места почему-то теряется поток теряется?
вот тут 
Код

$fp = fopen("http://adress/photo/".$data,"r");


Код

if ($data<>"_") {
      
    echo 'да';
      

        $fp = fopen("http://adress/photo/".$data,"r");
        

        $fl = fopen("http://arenda-spb.ru/pics/".$data,"w");
        
        $fl2 = fopen($relative_barbos."pics/".$data,"w");



        while (true) {

          $datas = fread($fp, 4096);

#          print strlen($datas)."=";

          if (strlen($datas) == 0) { break; }

          fputs($fl,$datas);

          fputs($fl2,$datas);

        }

        fclose($fp);

        fclose($fl);

        fclose($fl2);


        
        list($width, $height) = getimagesize("/pics/".$data);

        $newwidth = 211;

        $newheight = ($height/$width)*$newwidth;

        $source = imagecreatefromjpeg("pics/".$data);

        if ( $newwidth == $width &&  $newheight == $height) {

          $result = imagejpeg($source,"pics/".substr_replace($data, 'T', 0, 1));

          $result &= imagejpeg($source,$relative_barbos."pics/".substr_replace($data, 'T', 0, 1));

        } else {

         $thumb = imagecreatetruecolor($newwidth, $newheight);

          $result = imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

          $result &= imagejpeg($thumb,"pics/".substr_replace($data, 'T', 0, 1));

          $result &= imagejpeg($source,$relative_barbos."pics/".substr_replace($data, 'T', 0, 1));

        }

      }
 

Код

$file=fopen("http://adress/photo/2265_15333_17266.jpg",'r');
$data=fread($file,4050);
header("Content-Type: image/jpeg");
header("Content-Length:10000");

Автор: supervladislav 4.1.2012, 16:44
а скажите htacces файл может влиять 
php_value include_path .:/php/includes:/usr/local/lib/php:/home/u26156/include
DirectoryIndex index.php
RewriteEngine on
RewriteRule ^(.*).doc - [L]
RewriteRule ^(.*).txt - [L]
RewriteRule ^warning.php - [L]
RewriteRule ^index.php - [L]
RewriteRule ^index_new.php - [L]
RewriteRule ^page.php - [L]
RewriteRule ^43.gif - [L]
RewriteRule ^show.php - [L]
RewriteRule ^styles.css - [L]
RewriteRule ^(.*)style.php - [L]
RewriteRule ^admin.php - [L]
RewriteRule ^passwords.php - [L]
RewriteRule ^checksearch.php - [L]
RewriteRule ^db_import_owners.php - [L]
RewriteRule ^db_delete_old.php - [L]
RewriteRule ^db_import_list.php - [L]
RewriteRule ^db_import_unit.php - [L]
RewriteRule ^db_send_mails.php - [L]
RewriteRule ^db_send_mails_utf8.php - [L]
RewriteRule ^db_import_date.php - [L]
RewriteRule ^db_import_2.php - [L]
RewriteRule ^copy_photos.php - [L]
RewriteRule ^db_photo.php - [L]
RewriteRule ^test.php - [L]
RewriteRule ^phpinfo.php - [L]
RewriteRule ^show_time.php - [L]
RewriteRule ^images/.* - [L]
RewriteRule ^stat/.* - [L]
RewriteRule ^fck/.* - [L]
RewriteRule ^brd/.* - [L]
RewriteRule ^board/brd/(.*) brd/$1 [L]
RewriteRule ^brd\.php - [L]
RewriteRule ^img/.* - [L]
RewriteRule ^pics/.* - [L]
RewriteRule ^brd/.* - [L]
RewriteRule ^book/.* - [L]
RewriteRule ^wstat/.* - [L]
RewriteRule ^board/ brd.php [L]
RewriteRule ^.*/pics/(.*) pics/$1 [L]
RewriteRule ^.*/img/(.*) img/$1 [L]
RewriteRule ^.*/images/(.*) images/$1 [L]
RewriteRule ^.*/style\.css style.css [L]
RewriteRule ^(.*)_(.*)_(.*)/ page.php?show=$1&t=$2&t2=$3 [L]
RewriteRule ^(.*)_(.*)/ page.php?show=$1&t=$2 [L]
RewriteRule ^(.*)/ page.php?show=$1 [L]
RewriteRule (.*) index.php [L]

Автор: supervladislav 6.1.2012, 02:44
блин я замучался с этим сценарием 
если делаю вот так картинка появляется ,но какая особенность сценария что он её даже загружать не хочет
Код

$file=fopen("http://213.170.82.234/photo/377_3647_11821.jpg",'r');
//$data=fread($file,4050);
header("Content-Type: image/jpeg");
header("Content-Length:1000000");
fpassthru($file);
//fclose($file);
exit();

Автор: supervladislav 6.1.2012, 03:24
Скажите может есть принципиальная раздница если выводишь файл через   fpassthru или с помощью функции fread

Автор: $дмитрий 6.1.2012, 05:31
Перепиши свою кашицу из говна используя file_get/put_contents функции и все сразу заработает  smile 
Цитата

Скажите может есть принципиальная раздница если выводишь файл через   fpassthru или с помощью функции fread

Не нужен тут fpassthru

Автор: Xplod 6.1.2012, 13:47
Цитата
$дмитрий, вот это  выводит ну все остальные ошибки связанные с тем ,что связаны с линком.
Warning: fopen(http://adress/photo/637_14269_16033.jpg ) [function.fopen]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in


ну в урле отчетливо вижу пробел после ....jpg и ) если это на самом деле есть то попробуйте trim($data)

PS: используйте функцию copy(string source, string dest), она для этого и придумана...)))


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)