新浪微博インタフェースで画像微博を送信するのに失敗した原因


昨日のプロジェクトの开発の时に1つの画像の微博を送信する失败の奇怪な问题に出会って、本机で画像の微博を送信するのは良いですが、しかしテスト机に置いて送信することができなくて、コードは以下の通りです
 
   
   
   
   
  1. include_once'app/config.php' );  
  2. include_once'app/inc/saetv2.ex.class.php' );  
  3. include_once'app/inc/RedisSession.php');  
  4. $redisSession=new RedisSession($redis);  
  5. $token=$redisSession->getObject("token");  
  6. $c = new SaeTClientV2( WB_AKEY , WB_SKEY , $token['access_token'] );  
  7. var_dump($infto = $c->upload("tesdfsssfst","http://www.test.com/192.168.60.103/2012080948f5e0b3-282d-0422-bb4c-6651d7caa6ff.jpg"));  
  8. ?> 

しかし、実行は正常に送信できませんでした.
 
   
   
   
   
  1. array(3) { ["error"]=> string(50) "unsupported p_w_picpath type, only suport JPG, GIF, PNG!" ["error_code"]=> int(20005) ["request"]=> string(23) "/2/statuses/upload.json" } 

送信する画像は私のブラウザでアクセスできます.uploadのコードを見てみるとfileが使われています.get_contents関数
コードに追加しました
 
   
   
   
   
  1. echo file_get_contents("http://www.test.com/192.168.60.103/2012080948f5e0b3-282d-0422-bb4c-6651d7caa6ff.jpg"); 


不思議なことにurlを絶対パスに変えたが、画像を手に入れることができた.
 
   
   
   
   
  1. echo file_get_contents("/opt/htdocs/www.test.com/192.168.60.103/2012080948f5e0b3-282d-0422-bb4c-6651d7caa6ff.jpg"); 

そこで私はサーバーの上でテストしてこのドメイン名が127.0.0.1を使うことを発見して、私の機械の上で配置するhostsは192.168.60.5です
 
   
   
   
   
  1. [root@operation5 conf]# curl -kvL http://www.test.com  
  2. * About to connect() to www.test.com port 80  
  3. * Trying 127.0.0.1... connected  
  4. * Connected to www.test.com (127.0.0.1) port 80  
  5. > GET / HTTP/1.1  
  6. User-Agent: curl/7.15.5 (i686-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5  
  7. > Host: www.test.com  
  8. > Accept: */* 

www.testのため、アクセスしたサーバipが192.168.60.5ではない場合、別のサイトのコンテンツにアクセスするのではないかと疑い始めました.comはFleaフレームワークを使用していません.
apache構成を見てみると、やはり:
 
   
   
   
   
  1. 192.168.60.5:80 is a NameVirtualHost  
  2.          default server 192.168.60.5 (/opt/httpd/conf/extra/vhost/_default.conf:1)  
  3.          port 80 namevhost 192.168.60.5 (/opt/httpd/conf/extra/vhost/_default.conf:1)  
  4.          port 80 namevhost www.test.com (/opt/httpd/conf/extra/vhost/www.test.com.conf:1)  
  5. 192.168.60.5:82 www.test2.com (/opt/httpd/conf/extra/vhost/www.test2.com.conf:18)  
  6. 192.168.60.5:443 www.test3.com (/opt/httpd/conf/extra/vhost/www.test3.com.conf:74)  
  7. wildcard NameVirtualHosts and _default_ servers:  
  8. *:80 www.test4.com(/opt/httpd/conf/extra/vhost/www.test4.com.conf:308)  
  9. Syntax OK 

最后の行を见ると*:80なので、hosts:www.testが出てきます.com 127.0.0.1でwww.test.comがアクセスした内容はwww.test 4.comの内容
*:80を192.168.60.5:80に変更すればいい
あるいはすべての192.168.60.5:80を*:80に変更します.
だから*.80を使うのかip:80を使うのか統一しなければならない.そうしないとわけのわからない問題が発生する.
end