<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Fwolf's Blog &#187; Internet - Fwolf's Blog</title>
	<atom:link href="http://www.fwolf.com/blog/category/internet/feed" rel="self" type="application/rss+xml" />
	<link>http://www.fwolf.com/blog</link>
	<description>随心·随意·随缘·努力～</description>
	<lastBuildDate>Tue, 29 Dec 2009 14:58:13 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Flash 无法修改设置的问题</title>
		<link>http://www.fwolf.com/blog/post/449</link>
		<comments>http://www.fwolf.com/blog/post/449#comments</comments>
		<pubDate>Fri, 25 Sep 2009 06:02:07 +0000</pubDate>
		<dc:creator>Fwolf</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[Problem]]></category>
		<category><![CDATA[setting]]></category>

		<guid isPermaLink="false">http://www.fwolf.com/blog/?p=449</guid>
		<description><![CDATA[

这个怪怪的问题也不是一天两天了，就是 flash 设置窗口，或者当 flash 游戏需要使用本地存储空间时，自动弹出的设置窗口，这个窗口无法用鼠标点击，用键盘 TAB 键能在各部分之间游荡但还是无法调整设置，基本上就卡死在这里了。

遇到这种情况，可以访问这个链接：http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager07.html，注意链接中并不是图片，而是实际的设置调整组件。比如刚才说的访问本地资源需要确认的问题，在这里设置成Never Ask Again，同网站的资源就再也不会弹出窗口导致 flash 卡死了。

Ubuntu 9.04, Firefox 3.0.13, Flash Player 10.0 r32.

参考：


Adobe Flash Player &#8230; Settings Manager


	Tags: flash, Problem, setting

	Related posts
	
	机房搬家过程中的几件趣事 (0)
	升级到8.10 intrepid过程中libc6依赖性死循环问题的解决 (6)
	[ubuntu]安装vmware时找不到c header files的小问题 (3)
	Windows安全更新KB951748可能导致dns无法解析 (1)
	Vim的奇怪问题 (0)


]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/fwolf/3951938393/" title="Adobe flash player settings by fwolf, on Flickr" style="float:left;padding:0 20px 20px 0;border:0"><img src="http://farm3.static.flickr.com/2585/3951938393_f2cf2fa0b5_o.png" width="211" height="132" alt="Adobe flash player settings" /></a></p>

<p>这个怪怪的问题也不是一天两天了，就是 flash 设置窗口，或者当 flash 游戏需要使用本地存储空间时，自动弹出的设置窗口，这个窗口无法用鼠标点击，用键盘 TAB 键能在各部分之间游荡但还是无法调整设置，基本上就卡死在这里了。</p>

<p>遇到这种情况，可以访问这个链接：<a href="http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager07.html">http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager07.html</a>，注意链接中并<strong>不是图片</strong>，而是实际的设置调整组件。比如刚才说的访问本地资源需要确认的问题，在这里设置成<code>Never Ask Again</code>，同网站的资源就再也不会弹出窗口导致 flash 卡死了。</p>

<p>Ubuntu 9.04, Firefox 3.0.13, Flash Player 10.0 r32.</p>

<h4>参考：</h4>

<ul>
<li><a href="http://www.pcreview.co.uk/forums/thread-3129596.php">Adobe Flash Player &#8230; Settings Manager</a></li>
</ul>

	Tags: <a href="http://www.fwolf.com/blog/post/tag/flash" title="flash" rel="tag">flash</a>, <a href="http://www.fwolf.com/blog/post/tag/problem" title="Problem" rel="tag">Problem</a>, <a href="http://www.fwolf.com/blog/post/tag/setting" title="setting" rel="tag">setting</a><br />

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.fwolf.com/blog/post/417" title="机房搬家过程中的几件趣事 (2009-03-22)">机房搬家过程中的几件趣事</a> (0)</li>
	<li><a href="http://www.fwolf.com/blog/post/426" title="升级到8.10 intrepid过程中libc6依赖性死循环问题的解决 (2009-01-04)">升级到8.10 intrepid过程中libc6依赖性死循环问题的解决</a> (6)</li>
	<li><a href="http://www.fwolf.com/blog/post/162" title="[ubuntu]安装vmware时找不到c header files的小问题 (2006-05-09)">[ubuntu]安装vmware时找不到c header files的小问题</a> (3)</li>
	<li><a href="http://www.fwolf.com/blog/post/445" title="Windows安全更新KB951748可能导致dns无法解析 (2009-07-30)">Windows安全更新KB951748可能导致dns无法解析</a> (1)</li>
	<li><a href="http://www.fwolf.com/blog/post/367" title="Vim的奇怪问题 (2007-11-04)">Vim的奇怪问题</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.fwolf.com/blog/post/449/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>压缩网页图片</title>
		<link>http://www.fwolf.com/blog/post/447</link>
		<comments>http://www.fwolf.com/blog/post/447#comments</comments>
		<pubDate>Wed, 12 Aug 2009 04:54:34 +0000</pubDate>
		<dc:creator>Fwolf</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[compress]]></category>
		<category><![CDATA[convert]]></category>
		<category><![CDATA[gif]]></category>
		<category><![CDATA[image]]></category>
		<category><![CDATA[jpg]]></category>
		<category><![CDATA[optimize]]></category>
		<category><![CDATA[png]]></category>
		<category><![CDATA[yslow]]></category>

		<guid isPermaLink="false">http://www.fwolf.com/blog/?p=447</guid>
		<description><![CDATA[不压不知道，一压吓一跳，大部分图片几乎都能在近似无损的情况下压缩掉 65% 原始大小左右，如果指明有损压缩，比如 jpeg 的 85 %，还能更小。

Smush.it

smushit 现在已经属于 Yslow 的一部分了，可以通过 firefox 插件使用，也能在线用，缺点就是你的图片必须能够从公网访问。

可以压缩各种图片，按照官方的解释，它会尝试各种工具和算法，找到最优的方式。因此，smushit 是一种很安全的压缩工具，几乎看不到差别，就是用起来麻烦些。

imagemagick

不同的图片格式有各自的特点，比如 gif 善于存储颜色较少的图片，也是动画图片的首选；png 善于存储能够矢量化的图片，jpg 则善于存储颜色、图片变化都比较多的图片。根据不同的图片特点，进行类型转换，有时能收到不错的效果。

图片 convert 之后，还可以利用其它工具进一步压缩，不过效果不大了。

另附一个转换图片类型之后，批量替换模板中调用文件名的脚本：


grep logo.gif * -R &#124; awk '{print $1}' &#124; sed 's/://' &#124; xargs -I '{}' sed -i 's/logo.gif/logo.jpg/' '{}'


jpegoptim

这是今天刚发现的好东西，ubuntu 源中有，主要可以用它去除 jpg 图片文件当中的 comment exif IPTC 等无用标记，我测试的情况压缩率比 smushit 略低一点点。由于能够通过命令行使用，所以易用性更强。

一般我喜欢用 --strip-all 参数去除所有无用内容，实际压缩之前可以用 -n 参数预测一下压缩率（默认直接压缩覆盖源文件了），24bit Adobe 类型的图片基本上都能够压缩掉 65% 原始大小，碰到 24bit [...]]]></description>
			<content:encoded><![CDATA[<p>不压不知道，一压吓一跳，大部分图片几乎都能在近似无损的情况下压缩掉 65% 原始大小左右，如果指明有损压缩，比如 jpeg 的 85 %，还能更小。</p>

<h3>Smush.it</h3>

<p><a href="http://developer.yahoo.com/yslow/smushit/" title="Smush.it&trade;">smushit</a> 现在已经属于 <a href="http://developer.yahoo.com/yslow/">Yslow</a> 的一部分了，可以通过 firefox 插件使用，也能在线用，缺点就是你的图片必须能够从公网访问。</p>

<p>可以压缩各种图片，按照<a href="http://developer.yahoo.com/yslow/smushit/faq.html#faq_crushtool">官方的解释</a>，它会尝试各种工具和算法，找到最优的方式。因此，<a href="http://developer.yahoo.com/yslow/smushit/" title="Smush.it&trade;">smushit</a> 是一种很安全的压缩工具，几乎看不到差别，就是用起来麻烦些。</p>

<h3>imagemagick</h3>

<p>不同的图片格式有各自的特点，比如 gif 善于存储颜色较少的图片，也是动画图片的首选；png 善于存储能够矢量化的图片，jpg 则善于存储颜色、图片变化都比较多的图片。根据不同的图片特点，进行类型转换，有时能收到不错的效果。</p>

<p>图片 convert 之后，还可以利用其它工具进一步压缩，不过效果不大了。</p>

<p>另附一个转换图片类型之后，批量替换模板中调用文件名的脚本：</p>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">grep</span> logo.gif <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #660033;">-R</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{print $1}'</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'s/://'</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">xargs</span> <span style="color: #660033;">-I</span> <span style="color: #ff0000;">'{}'</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-i</span> <span style="color: #ff0000;">'s/logo.gif/logo.jpg/'</span> <span style="color: #ff0000;">'{}'</span></pre></div></div>


<h3>jpegoptim</h3>

<p>这是今天刚发现的好东西，ubuntu 源中有，主要可以用它去除 jpg 图片文件当中的 comment exif IPTC 等无用标记，我测试的情况压缩率比 <a href="http://developer.yahoo.com/yslow/smushit/" title="Smush.it&trade;">smushit</a> 略低一点点。由于能够通过命令行使用，所以易用性更强。</p>

<p>一般我喜欢用 <code>--strip-all</code> 参数去除所有无用内容，实际压缩之前可以用 <code>-n</code> 参数预测一下压缩率（默认直接压缩覆盖源文件了），<code>24bit Adobe</code> 类型的图片基本上都能够压缩掉 65% 原始大小，碰到 <code>24bit JFIF</code> 这种类型的图片一般压不动，但带上有损压缩参数比如 <code>-m85</code>之后，依然能够达到较理想的压缩率，并且图片损失效果不明显。</p>

<p>遇到无法压缩的图片、压缩后体积反而增大的图片会自动跳过，很贴心。</p>

<p>基本上，有了上面三种方式，就能够处理大部分网页图片了。</p>

	Tags: <a href="http://www.fwolf.com/blog/post/tag/compress" title="compress" rel="tag">compress</a>, <a href="http://www.fwolf.com/blog/post/tag/convert" title="convert" rel="tag">convert</a>, <a href="http://www.fwolf.com/blog/post/tag/gif" title="gif" rel="tag">gif</a>, <a href="http://www.fwolf.com/blog/post/tag/image" title="image" rel="tag">image</a>, <a href="http://www.fwolf.com/blog/post/tag/jpg" title="jpg" rel="tag">jpg</a>, <a href="http://www.fwolf.com/blog/post/tag/optimize" title="optimize" rel="tag">optimize</a>, <a href="http://www.fwolf.com/blog/post/tag/png" title="png" rel="tag">png</a>, <a href="http://www.fwolf.com/blog/post/tag/yslow" title="yslow" rel="tag">yslow</a><br />

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.fwolf.com/blog/post/430" title="转换静态图像为视频 (2009-01-19)">转换静态图像为视频</a> (1)</li>
	<li><a href="http://www.fwolf.com/blog/post/277" title="使用mencoder转换佳能数码相机录像文件的最佳参数 (2007-01-01)">使用mencoder转换佳能数码相机录像文件的最佳参数</a> (4)</li>
	<li><a href="http://www.fwolf.com/blog/post/383" title="[MediaTemple]虚拟主机内存优化的一点心得 (2008-02-19)">[MediaTemple]虚拟主机内存优化的一点心得</a> (2)</li>
	<li><a href="http://www.fwolf.com/blog/post/53" title="PNG图片压缩工具 (2005-06-19)">PNG图片压缩工具</a> (7)</li>
	<li><a href="http://www.fwolf.com/blog/post/89" title="IE 6.0仍然无法显示PNG图片文件的原貌？ (2005-11-14)">IE 6.0仍然无法显示PNG图片文件的原貌？</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.fwolf.com/blog/post/447/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Curl奇怪的403错误</title>
		<link>http://www.fwolf.com/blog/post/444</link>
		<comments>http://www.fwolf.com/blog/post/444#comments</comments>
		<pubDate>Tue, 30 Jun 2009 17:27:33 +0000</pubDate>
		<dc:creator>Fwolf</dc:creator>
				<category><![CDATA[Develop]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[403]]></category>
		<category><![CDATA[curl]]></category>
		<category><![CDATA[error]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[proxy]]></category>
		<category><![CDATA[tunnel]]></category>

		<guid isPermaLink="false">http://www.fwolf.com/blog/?p=444</guid>
		<description><![CDATA[自己用的小PHP应用，使用curl抓网页下来处理，为了穿墙方便，使用Privoxy作为代理，便于选择哪些网站使用proxy、哪些不用。但今天却遇到了奇怪的问题，访问google baidu这些网站居然都返回403错误，而访问其他的一些网站没事，如果设置为不使用proxy则都能正常访问。

难道google baidu就不让用proxy连接么？显然不可能，所以打开curl的信息输出（curl_setopt($this-&#62;mSh, CURLOPT_VERBOSE, 1);）看看，得到以下结果：

*   Trying 127.0.0.1... * connected
* Connected to 127.0.0.1 (127.0.0.1) port 8118 (#0)
* Establish HTTP proxy tunnel to www.baidu.com:80
&#62; CONNECT www.baidu.com:80 HTTP/1.0
Host: www.baidu.com:80
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Proxy-Connection: Keep-Alive

&#60; HTTP/1.0 403 Connection not allowable
&#60; X-Hint: If you read this message interactively, then you know why this happens [...]]]></description>
			<content:encoded><![CDATA[<p>自己用的小PHP应用，使用curl抓网页下来处理，为了穿墙方便，使用Privoxy作为代理，便于选择哪些网站使用proxy、哪些不用。但今天却遇到了奇怪的问题，访问google baidu这些网站居然都返回403错误，而访问其他的一些网站没事，如果设置为不使用proxy则都能正常访问。</p>

<p>难道google baidu就不让用proxy连接么？显然不可能，所以打开curl的信息输出（<code>curl_setopt($this-&gt;mSh, CURLOPT_VERBOSE, 1);</code>）看看，得到以下结果：</p>

<pre><code>*   Trying 127.0.0.1... * connected
* Connected to 127.0.0.1 (127.0.0.1) port 8118 (#0)
* Establish HTTP proxy tunnel to www.baidu.com:80
&gt; CONNECT www.baidu.com:80 HTTP/1.0
Host: www.baidu.com:80
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Proxy-Connection: Keep-Alive

&lt; HTTP/1.0 403 Connection not allowable
&lt; X-Hint: If you read this message interactively, then you know why this happens ,-)
&lt; 
* The requested URL returned error: 403
* Received HTTP code 403 from proxy after CONNECT
* Closing connection #0
... Failed.
</code></pre>

<p>可以看到proxy服务器工作正常，的确是baidu返回了403错误，但原因肯定还在我这边。终于，从网上（<a href="http://curl.haxx.se/mail/archive-2006-04/0054.html">1of2</a>, <a href="http://curl.haxx.se/mail/archive-2006-04/0055.html">2of2</a>）得到了点启发──我使用的是proxytunnel而非proxy。</p>

<p>在代码中，有这么一句：</p>


<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">	<span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">mSh</span><span style="color: #339933;">,</span> CURLOPT_HTTPPROXYTUNNEL<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">mSh</span><span style="color: #339933;">,</span> CURLOPT_PROXY<span style="color: #339933;">,</span> <span style="color: #000088;">$phost</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>


<p>php文档中没有详细说明，不过<code>man curl</code>中有详细解释，两者都是代理，proxytunnel（<code>-p参数</code>）允许其他协议通过http代理传输，而proxy（<code>-x参数</code>）则只能走http协议。所以我猜测，google baidu的服务器和curl的proxytunnel不和，所以返回403。</p>

<p>禁用掉上面2行代码的第一句后，curl访问恢复正常。</p>

<p>比较奇怪的是，几种操作系统下还不一样，一台MAC OSX就要显式的禁用proxytunnel才可以，curl版本：</p>

<pre><code>$ curl --version
curl 7.16.3 (powerpc-apple-darwin9.0) libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
Protocols: tftp ftp telnet dict ldap http file https ftps 
Features: GSS-Negotiate IPv6 Largefile NTLM SSL libz 
</code></pre>

<p>而另外一台ubuntu则完全不受影响，怎么都能用，curl版本：</p>

<pre><code>$ curl --version
curl 7.18.2 (i486-pc-linux-gnu) libcurl/7.18.2 OpenSSL/0.9.8g zlib/1.2.3.3 libidn/1.10
Protocols: tftp ftp telnet dict ldap ldaps http file https ftps 
Features: GSS-Negotiate IDN IPv6 Largefile NTLM SSL libz 
</code></pre>

<p>MT主机上的centos也没事，curl版本：</p>

<pre><code>$ curl --version
curl 7.15.5 (i686-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5
Protocols: tftp ftp telnet dict ldap http file https ftps 
Features: GSS-Negotiate IDN IPv6 Largefile NTLM SSL libz 
</code></pre>

<p>看来不完全是curl版本问题，MAC OSX的确与众不同啊。</p>

<p>还有一个原因也会导致curl返回403错误，如果设置了：</p>


<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">	<span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span> CURLOPT_NOBODY<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>


<p>则需要紧跟着设置：</p>


<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">	<span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span> CURLOPT_CUSTOMREQUEST<span style="color: #339933;">,</span> <span style="color: #0000ff;">'GET'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>


<p>不然会因为http服务器不允许 HEAD 命令而返回403错误。参考：<a href="http://forums.devshed.com/php-development-5/trouble-with-a-curl-request-in-php-445222.html">Trouble with a cURL request in PHP</a>。MAC OSX上curl之所以特殊，也不排除是这种原因吧。</p>

	Tags: <a href="http://www.fwolf.com/blog/post/tag/403" title="403" rel="tag">403</a>, <a href="http://www.fwolf.com/blog/post/tag/curl" title="curl" rel="tag">curl</a>, <a href="http://www.fwolf.com/blog/post/tag/error" title="error" rel="tag">error</a>, <a href="http://www.fwolf.com/blog/post/tag/http" title="http" rel="tag">http</a>, <a href="http://www.fwolf.com/blog/post/tag/php" title="PHP" rel="tag">PHP</a>, <a href="http://www.fwolf.com/blog/post/tag/proxy" title="proxy" rel="tag">proxy</a>, <a href="http://www.fwolf.com/blog/post/tag/tunnel" title="tunnel" rel="tag">tunnel</a><br />

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.fwolf.com/blog/post/411" title="由一个错误学到的一些php安全配置问题 (2008-07-13)">由一个错误学到的一些php安全配置问题</a> (4)</li>
	<li><a href="http://www.fwolf.com/blog/post/391" title="adodb5连接sybase的一个错误 (2008-03-25)">adodb5连接sybase的一个错误</a> (0)</li>
	<li><a href="http://www.fwolf.com/blog/post/300" title="针对$_SERVER['PHP_SELF']的跨站脚本攻击（XSS） (2007-03-18)">针对$_SERVER['PHP_SELF']的跨站脚本攻击（XSS）</a> (3)</li>
	<li><a href="http://www.fwolf.com/blog/post/443" title="配置安全的共享web服务器（抛砖引玉） (2009-06-09)">配置安全的共享web服务器（抛砖引玉）</a> (4)</li>
	<li><a href="http://www.fwolf.com/blog/post/400" title="选择Eclipse PHP Development Tools(PDT)作为PHP开发工具 (2008-05-03)">选择Eclipse PHP Development Tools(PDT)作为PHP开发工具</a> (8)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.fwolf.com/blog/post/444/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>teamol=WebCollab</title>
		<link>http://www.fwolf.com/blog/post/432</link>
		<comments>http://www.fwolf.com/blog/post/432#comments</comments>
		<pubDate>Sat, 28 Feb 2009 16:19:33 +0000</pubDate>
		<dc:creator>Fwolf</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[GTD]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[webcollab]]></category>

		<guid isPermaLink="false">http://www.fwolf.com/blog/?p=432</guid>
		<description><![CDATA[

如果你曾经在国内某个php源码下载网站下载过一个叫teamol的团队任务分配软件，不知你有没有注意到，它和国外开源项目WebCollab之间似乎有着亲密的联系。

本来我也没注意，可这个teamol下载回来以后安装颇不顺利，文档TeamOL setup.doc和安装界面有不一样的地方，虽然国内开源项目用doc写文档不算奇怪，但这个文档内容也太少了。代码注释中有个“官方网站”http://www.inodea.cn是打不开的，代码中很多地方标的版本号是0.1，可下载时我记得说的出3.0或者3.2版本。

开始安装以后有个地方卡壳了，还没安装数据库，就要从数据库里信息来验证用户是否有权限安装。hack安装之后，path配置也有问题，模板中还有一些错误，比如明明这段函数内没有$title这个变量却多次使用，要知道即使是global $title也是没有值的。

反正歪歪扭扭总算把程序配置得能运转了，开始试试，功能倒还有点让我满意的意思，除了日期选择的弹出窗口我极其不喜欢。然后我就发现了一件让我大跌眼镜的事情，这么一个错误百出或者说有点像半成品的“国产开源”作品，居然不仅有英、中文支持，还有一个看似排版比较成熟的英文帮助页面：



好奇的我挑了帮助页面中的一句话上G一搜，便找到了WebCollab。仔细比较下来，两者的目录结构也几乎一样：



结果应该不用我说了，也或许teamol的作者原想只是以webcollab为蓝本边学习边制作一个全新的系统吧，从注释中的版本0.1和修改过使用frame的页面框架中能够看出作者还是付出了些劳动的。

回到主题，用于小组内工作任务分配跟踪，倒是可以试试WebCollab，界面是简陋了点，基本的内容算是都有了。但这类软件，至今没找到一个特别好用的，包括很多在线的GTD或者项目管理系统。



	Tags: GTD, opensource, PHP, webcollab

	Related posts
	
	针对$_SERVER['PHP_SELF']的跨站脚本攻击（XSS） (3)
	配置安全的共享web服务器（抛砖引玉） (4)
	选择Eclipse PHP Development Tools(PDT)作为PHP开发工具 (8)
	让phpmailer支持中文名称的附件 (5)
	终于能够通过phpmailer使用gmail账号发送邮件了 (50)


]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/fwolf/3315783583/" title="Team Online 项目管理系统 by fwolf, on Flickr"><img src="http://farm4.static.flickr.com/3364/3315783583_6549d775e4_o.png" width="354" height="263" alt="Team Online 项目管理系统" /></a></p>

<p>如果你曾经在国内某个php源码下载网站下载过一个叫teamol的团队任务分配软件，不知你有没有注意到，它和国外开源项目<a href="http://webcollab.sourceforge.net/">WebCollab</a>之间似乎有着亲密的联系。</p>

<p>本来我也没注意，可这个teamol下载回来以后安装颇不顺利，文档<code>TeamOL setup.doc</code>和安装界面有不一样的地方，虽然国内开源项目用doc写文档不算奇怪，但这个文档内容也太少了。代码注释中有个“官方网站”http://www.inodea.cn是打不开的，代码中很多地方标的版本号是0.1，可下载时我记得说的出3.0或者3.2版本。</p>

<p>开始安装以后有个地方卡壳了，还没安装数据库，就要从数据库里信息来验证用户是否有权限安装。hack安装之后，path配置也有问题，模板中还有一些错误，比如明明这段函数内没有<code>$title</code>这个变量却多次使用，要知道即使是<code>global $title</code>也是没有值的。</p>

<p>反正歪歪扭扭总算把程序配置得能运转了，开始试试，功能倒还有点让我满意的意思，除了日期选择的弹出窗口我极其不喜欢。然后我就发现了一件让我大跌眼镜的事情，这么一个错误百出或者说有点像半成品的“国产开源”作品，居然不仅有英、中文支持，还有一个看似排版比较成熟的英文帮助页面：</p>

<p><a href="http://www.flickr.com/photos/fwolf/3315826755/" title="webcollab-help by fwolf, on Flickr"><img src="http://farm4.static.flickr.com/3640/3315826755_5522fc9314_m.jpg" width="240" height="123" alt="webcollab-help" /></a></p>

<p>好奇的我挑了帮助页面中的一句话上G一搜，便找到了<a href="http://webcollab.sourceforge.net/">WebCollab</a>。仔细比较下来，两者的目录结构也几乎一样：</p>

<p><a href="http://www.flickr.com/photos/fwolf/3316666910/" title="dir structure of teamol and webcollab by fwolf, on Flickr"><img src="http://farm4.static.flickr.com/3664/3316666910_9b69bd7dc4_m.jpg" width="240" height="165" alt="dir structure of teamol and webcollab" /></a></p>

<p>结果应该不用我说了，也或许teamol的作者原想只是以webcollab为蓝本边学习边制作一个全新的系统吧，从注释中的版本0.1和修改过使用frame的页面框架中能够看出作者还是付出了些劳动的。</p>

<p>回到主题，用于小组内工作任务分配跟踪，倒是可以试试<a href="http://webcollab.sourceforge.net/">WebCollab</a>，界面是简陋了点，基本的内容算是都有了。但这类软件，至今没找到一个特别好用的，包括很多在线的GTD或者项目管理系统。</p>

<p><a href="http://www.flickr.com/photos/fwolf/3316619628/" title="WebCollab login by fwolf, on Flickr"><img src="http://farm4.static.flickr.com/3595/3316619628_fcbf0f7500_m.jpg" width="240" height="197" alt="WebCollab login" /></a></p>

	Tags: <a href="http://www.fwolf.com/blog/post/tag/gtd" title="GTD" rel="tag">GTD</a>, <a href="http://www.fwolf.com/blog/post/tag/opensource" title="opensource" rel="tag">opensource</a>, <a href="http://www.fwolf.com/blog/post/tag/php" title="PHP" rel="tag">PHP</a>, <a href="http://www.fwolf.com/blog/post/tag/webcollab" title="webcollab" rel="tag">webcollab</a><br />

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.fwolf.com/blog/post/300" title="针对$_SERVER['PHP_SELF']的跨站脚本攻击（XSS） (2007-03-18)">针对$_SERVER['PHP_SELF']的跨站脚本攻击（XSS）</a> (3)</li>
	<li><a href="http://www.fwolf.com/blog/post/443" title="配置安全的共享web服务器（抛砖引玉） (2009-06-09)">配置安全的共享web服务器（抛砖引玉）</a> (4)</li>
	<li><a href="http://www.fwolf.com/blog/post/400" title="选择Eclipse PHP Development Tools(PDT)作为PHP开发工具 (2008-05-03)">选择Eclipse PHP Development Tools(PDT)作为PHP开发工具</a> (8)</li>
	<li><a href="http://www.fwolf.com/blog/post/176" title="让phpmailer支持中文名称的附件 (2006-05-23)">让phpmailer支持中文名称的附件</a> (5)</li>
	<li><a href="http://www.fwolf.com/blog/post/155" title="终于能够通过phpmailer使用gmail账号发送邮件了 (2006-04-14)">终于能够通过phpmailer使用gmail账号发送邮件了</a> (50)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.fwolf.com/blog/post/432/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>用ssh打通反向隧道，内网也可对外提供服务</title>
		<link>http://www.fwolf.com/blog/post/410</link>
		<comments>http://www.fwolf.com/blog/post/410#comments</comments>
		<pubDate>Thu, 10 Jul 2008 11:38:30 +0000</pubDate>
		<dc:creator>Fwolf</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[allow]]></category>
		<category><![CDATA[denyhosts]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[reverse]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[tunnel]]></category>

		<guid isPermaLink="false">http://www.fwolf.com/blog/?p=410</guid>
		<description><![CDATA[一般正规一点的网络环境，大多是这样的：防火墙后分为内网和中立区（DMZ），并且内网和DMZ虽然都能访问外网，互相却是无法直接访问的。内网和DMZ的区别就是，来自外网的访问，都通过防火墙上的规则映射到DMZ里的服务器上，而内网一般是不允许这样的。

现在需要解决的问题就是，在防火墙只能给DMZ开端口，内网和外网不可直接互访的情况下，如果让内网的机器对外提供服务。

ssh是很神奇的，使用它创建的隧道，可以起到代理的作用，数据流的方向是：

本机 -&#62; 隧道 -&#62; 外网


应用到我们的问题中，如果把隧道反过来，就是：

外网 -&#62; DMZ -&#62; 隧道 -&#62; 内网


这就需要用到ssh的反向隧道，它在服务器上打开一个监听端口，这个端口的访问会被隧道传输到本地，结果再通过隧道传到服务器上，从监听端口返回给客户。这样，在我们的应用中，内网机器通过外网访问DMZ服务器，创建ssh反向隧道，就能够对外提供服务了。当然，防火墙上要将相应端口映射到DMZ的服务器上。

比如，在内网登录DMZ服务器：

ssh -R 8082:localhost:82 fwolf@svr5.tld -o ControlPath=/tmp/ssh_svr5_reverse_tunnel


这样，访问DMZ服务器svr5的8082端口，就是在访问本机的82端口。之所以带上-o ControlPath，是为了和其它访问svr5的进程使用不同的master模式（如果不是第一次创建这个master，而是使用了原来的连接的sockts，肯定就不会创建隧道了）。

有几个问题还需要注意一下：


如果DMZ上监听端口小于1000的话，就必须用root用户登录DMZ服务器，比如root@svr5.tld。
DMZ服务器上的sshd必须开启GatewayPorts选项，在文件/etc/ssh/sshd_config中加入GatewayPorts yes。
记得不要idle，参考中有在服务端设置的方法。
如果放在其它脚本，比如/etc/rc.local中执行的话，除了配置自动登录，还可以带上-fN参数，放到后台去。


参考


TIP SSH Reverse Tunnel
ssh reverse tunneling
PuTTY 中文教程 作者：柴锋 2006年11月


Update @ 2008-07-25

注意，由于使用了反向隧道，所以ssh隧道实际作用相当于一个代理，访问的来源也自然就都成了127.0.0.1，如果同时还启用了denyhosts，千万记得要把本机地址127.0.0.1放入白名单/etc/hosts.allow，不然就会成为其他登录失败的牺牲品（失败的登录，其来源也成了loopback的地址）：

ssh_exchange_identification: Connection closed by remote host
Fatal error: Lost connection with the server


没办法，为了网络通道的畅通，只能牺牲一部分安全性了。

	Tags: allow, denyhosts, Internet, Linux, network, reverse, ssh, tips, tunnel

	Related posts
	
	配置ssh的自动登录 (8)
	ssh的连接重用 (2)
	针对$_SERVER['PHP_SELF']的跨站脚本攻击（XSS） (3)
	配置安全的共享web服务器（抛砖引玉） (4)
	选择Eclipse PHP Development [...]]]></description>
			<content:encoded><![CDATA[<p>一般正规一点的网络环境，大多是这样的：防火墙后分为内网和中立区（DMZ），并且内网和DMZ虽然都能访问外网，互相却是无法直接访问的。内网和DMZ的区别就是，来自外网的访问，都通过防火墙上的规则映射到DMZ里的服务器上，而内网一般是不允许这样的。</p>

<p>现在需要解决的问题就是，在防火墙只能给DMZ开端口，内网和外网不可直接互访的情况下，如果让内网的机器对外提供服务。</p>

<p>ssh是很神奇的，使用它创建的隧道，可以起到代理的作用，数据流的方向是：</p>

<pre><code>本机 -&gt; 隧道 -&gt; 外网
</code></pre>

<p>应用到我们的问题中，如果把隧道反过来，就是：</p>

<pre><code>外网 -&gt; DMZ -&gt; 隧道 -&gt; 内网
</code></pre>

<p>这就需要用到ssh的反向隧道，它在服务器上打开一个监听端口，这个端口的访问会被隧道传输到本地，结果再通过隧道传到服务器上，从监听端口返回给客户。这样，在我们的应用中，内网机器通过外网访问DMZ服务器，创建ssh反向隧道，就能够对外提供服务了。当然，防火墙上要将相应端口映射到DMZ的服务器上。</p>

<p>比如，在内网登录DMZ服务器：</p>

<pre><code>ssh -R 8082:localhost:82 fwolf@svr5.tld -o ControlPath=/tmp/ssh_svr5_reverse_tunnel
</code></pre>

<p>这样，访问DMZ服务器svr5的8082端口，就是在访问本机的82端口。之所以带上<code>-o ControlPath</code>，是为了和其它访问svr5的进程使用不同的<a href="385">master模式</a>（如果不是第一次创建这个master，而是使用了原来的连接的sockts，肯定就不会创建隧道了）。</p>

<p>有几个问题还需要注意一下：</p>

<ul>
<li>如果DMZ上监听端口小于1000的话，就必须用root用户登录DMZ服务器，比如<code>root@svr5.tld</code>。</li>
<li>DMZ服务器上的sshd必须开启GatewayPorts选项，在文件<code>/etc/ssh/sshd_config</code>中加入<code>GatewayPorts yes</code>。</li>
<li>记得不要idle，参考中有在服务端设置的方法。</li>
<li>如果放在其它脚本，比如<code>/etc/rc.local</code>中执行的话，除了配置<a href="279">自动登录</a>，还可以带上<code>-fN</code>参数，放到后台去。</li>
</ul>

<h4>参考</h4>

<ul>
<li><a href="http://gentoo-wiki.com/TIP_SSH_Reverse_Tunnel">TIP SSH Reverse Tunnel</a></li>
<li><a href="http://linux.byexamples.com/archives/238/ssh-reverse-tunneling/">ssh reverse tunneling</a></li>
<li><a href="http://chaifeng.com/blog/2007/06/putty_200611.html">PuTTY 中文教程 作者：柴锋 2006年11月</a></li>
</ul>

<h4>Update @ 2008-07-25</h4>

<p>注意，由于使用了反向隧道，所以ssh隧道实际作用相当于一个代理，访问的来源也自然就都成了<code>127.0.0.1</code>，如果同时还启用了<a href="http://denyhosts.sourceforge.net/">denyhosts</a>，千万记得要把本机地址<code>127.0.0.1</code>放入白名单<code>/etc/hosts.allow</code>，不然就会成为其他登录失败的牺牲品（失败的登录，其来源也成了loopback的地址）：</p>

<pre><code>ssh_exchange_identification: Connection closed by remote host
Fatal error: Lost connection with the server
</code></pre>

<p>没办法，为了网络通道的畅通，只能牺牲一部分安全性了。</p>

	Tags: <a href="http://www.fwolf.com/blog/post/tag/allow" title="allow" rel="tag">allow</a>, <a href="http://www.fwolf.com/blog/post/tag/denyhosts" title="denyhosts" rel="tag">denyhosts</a>, <a href="http://www.fwolf.com/blog/post/tag/internet" title="Internet" rel="tag">Internet</a>, <a href="http://www.fwolf.com/blog/post/tag/linux" title="Linux" rel="tag">Linux</a>, <a href="http://www.fwolf.com/blog/post/tag/network" title="network" rel="tag">network</a>, <a href="http://www.fwolf.com/blog/post/tag/reverse" title="reverse" rel="tag">reverse</a>, <a href="http://www.fwolf.com/blog/post/tag/ssh" title="ssh" rel="tag">ssh</a>, <a href="http://www.fwolf.com/blog/post/tag/tips" title="tips" rel="tag">tips</a>, <a href="http://www.fwolf.com/blog/post/tag/tunnel" title="tunnel" rel="tag">tunnel</a><br />

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.fwolf.com/blog/post/279" title="配置ssh的自动登录 (2007-01-05)">配置ssh的自动登录</a> (8)</li>
	<li><a href="http://www.fwolf.com/blog/post/385" title="ssh的连接重用 (2008-03-04)">ssh的连接重用</a> (2)</li>
	<li><a href="http://www.fwolf.com/blog/post/300" title="针对$_SERVER['PHP_SELF']的跨站脚本攻击（XSS） (2007-03-18)">针对$_SERVER['PHP_SELF']的跨站脚本攻击（XSS）</a> (3)</li>
	<li><a href="http://www.fwolf.com/blog/post/443" title="配置安全的共享web服务器（抛砖引玉） (2009-06-09)">配置安全的共享web服务器（抛砖引玉）</a> (4)</li>
	<li><a href="http://www.fwolf.com/blog/post/400" title="选择Eclipse PHP Development Tools(PDT)作为PHP开发工具 (2008-05-03)">选择Eclipse PHP Development Tools(PDT)作为PHP开发工具</a> (8)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.fwolf.com/blog/post/410/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
