モノノフ日記

普通の日記です

WordPressでproxy使う設定方法

FeedWordPressというプラグインを使おうと思ったら、proxyが越えれなくて困ってました。
Googleで調べてたら本家のTracにチケットが出ててパッチも公開されてました。
#4011 (add global proxy support in options) – WordPress Trac

編集するファイル

  • wp-config.php
  • class-snoppy.php
  • class-IXR.php
  • functions.php
wp-config.php

下記コードを追加

<?php
+ //proxy settings
+ define('WP_PROXYHOST', 'your.proxy.host');
+ define('WP_PROXYPORT', 'yourproxyport');
+ define('WP_PROXYUSER', 'yourproxyusername');
+ define('WP_PROXYPASS', 'yourproxypassword');
+ define('WP_USEPROXY', false);	//set to true if you use a proxy
class-snoppy.php
  • 47〜50行目あたり
<?php
- var $proxy_host		=	"";					// proxy host to use
- var $proxy_port		=	"";					// proxy port to use
- var $proxy_user		=	"";					// proxy user to use
- var $proxy_pass		=	"";					// proxy password to use
+ var $proxy_host		=	WP_PROXYHOST;		// proxy host to use
+ var $proxy_port		=	WP_PROXYPORT;		// proxy port to use
+ var $proxy_user		=	WP_PROXYUSER;		// proxy user to use
+ var $proxy_pass		=	WP_PROXYPASS;		// proxy password to use
  • 118行目あたり
<?php
- var $_isproxy		=	false;				// set if using a proxy server
+ var $_isproxy		=	WP_USEPROXY;		// set if using a proxy server
class-IXR.php
  • 500行目あたり
<?php
- $fp = @fsockopen($this->server, $this->port, $errno, $errstr, $this->timeout);
+ if (!WP_USEPROXY) {
+   $fp = @fsockopen($this->server, $this->port, $errno, $errstr, $this->timeout);
+ } else {
+   $fp = @fsockopen(WP_PROXYHOST, WP_PROXYPORT, $errno, $errstr, $this->timeout);
+ }
functions.php
  • 555〜558行目あたり
<?php
- $fp = @fsockopen($host, $parts['port'], $err_num, $err_msg, 3);
- if ( !$fp )
-   return false;
-
+ if (WP_USEPROXY) {
+   $fp = fsockopen(WP_PROXYHOST, WP_PROXYPORT);
+   if (!$fp)
+     return false;
+ fputs($fp, $head);
+ fputs($fp, "Proxy-Authentication: Basic " . base64_encode(WP_PROXYUSER . ":" . WP_PROXYPASS) . "\r\n\r\n");
+ } else {
+   $fp = @fsockopen($host, $parts['port'], $err_num, $err_msg, 3);
+   if ( !$fp )
+     return false;
+   fputs( $fp, $head );
+ }
  • 560行目あたり
<?php
- fputs( $fp, $head );
  • 874〜883行目あたり
<?php
- $fp = @fopen( $uri, 'r' );
- if ( !$fp )
-   return false;
-
- //stream_set_timeout($fp, $timeout); // Requires php 4.3
- $linea = '';
- while( $remote_read = fread($fp, 4096) )
-   $linea .= $remote_read;
- fclose($fp);
- return $linea;
+ if (WP_USEPROXY) {
+   $proxy_fp = fsockopen(WP_PROXYHOST, WP_PROXYPORT);
+   if ( !$proxy_fp )
+     return false;
+   fputs($proxy_fp, "GET $uri HTTP/1.0\r\nHost: ".WP_PROXYHOST." \r\n");
+   fputs($proxy_fp, "Proxy-Authentication: Basic " . base64_encode(WP_PROXYUSER . ":" . WP_PROXYPASS) . "\r\n\r\n");
+   while(!feof($proxy_fp))
+     $proxy_cont .= fread($proxy_fp,4096);
+   fclose($proxy_fp);
+   $proxy_cont = substr($proxy_cont, strpos($proxy_cont, "\r\n\r\n")+4);
+   return $proxy_cont;
+ } else {
+   $fp = fopen( $uri, 'r' );
+   if ( !$fp )
+     return false;
+   $linea = '';
+   while( $remote_read = fread($fp, 4096) )
+     $linea .= $remote_read;
+   fclose($fp);
+   return $linea;
+ }
  • 908行目あたり
<?php
+ if (WP_USEPROXY) {
+ curl_setopt ($handle, CURLOPT_PROXY, WP_PROXYHOST . ":" . WP_PROXYPORT);
+ curl_setopt ($handle, CURLOPT_PROXYUSERPWD, WP_PROXYUSER . ":".  WP_PROXYPASS);
+ }