<?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>CODE24H.COM</title>
	<atom:link href="http://code24h.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://code24h.com</link>
	<description>Thủ Thuật WordPress, PHP, United Framework</description>
	<lastBuildDate>Wed, 16 Nov 2011 15:10:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>VN-News 2.0 Beta (Tên mới: PressZine)</title>
		<link>http://code24h.com/2011/vn-news-2-0-beta-ten-moi-presszine/</link>
		<comments>http://code24h.com/2011/vn-news-2-0-beta-ten-moi-presszine/#comments</comments>
		<pubDate>Fri, 11 Nov 2011 16:34:05 +0000</pubDate>
		<dc:creator>max2max</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Themes]]></category>
		<category><![CDATA[presszine]]></category>
		<category><![CDATA[themes]]></category>
		<category><![CDATA[united framework]]></category>
		<category><![CDATA[vn-news]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://code24h.com/?p=458</guid>
		<description><![CDATA[Chào các bạn. Phiên bản VN-News 2.0 đang tiếp tục hoàn thành. Tôi sẽ gửi bản này đến những người quan tâm gần đây nhất test trước. Phiên bản chính thức sẽ được cung cấp Free cho các bạn, nhưng max muốn phiên bản này phải chuyên nghiệp nên rất cần những cao thủ thực sự test trước (lĩnh [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_459" class="wp-caption aligncenter" style="width: 310px"><a href="http://code24h.com/wp-content/uploads/presszine.png"><img class="size-medium wp-image-459  " title="presszine" src="http://code24h.com/wp-content/uploads/presszine-300x235.png" alt="Presszine" width="300" height="235" /></a>
<p class="wp-caption-text">Giao diện Presszine (Xin lỗi vì mình chưa cài Fireshot nên chưa chụp được full màn hình)</p>
</div>
<p>Chào các bạn. Phiên bản VN-News 2.0 đang tiếp tục hoàn thành. Tôi sẽ gửi bản này đến những người quan tâm gần đây nhất test trước.</p>
<p>Phiên bản chính thức sẽ được cung cấp Free cho các bạn, nhưng max muốn phiên bản này phải chuyên nghiệp nên rất cần những cao thủ thực sự test trước (lĩnh hậu quả trước). Vì vậy, đầu tháng 12 là thời điểm thích hợp để gửi sản phẩm này đến các bạn.</p>
<p>Max đã tạo một forum để các bạn thảo luận về WordPress (như vậy sẽ hiệu quả hơn comment). Các bạn có thể truy cập địa chỉ:</p>
<p><a title="Theme United Support Forums" href="http://themeunited.com/forums">http://themeunited.com/forums</a></p>
<p>Lưu ý: Thảo luận bằng tiếng Anh.</p>
<p><strong>Những bác sẽ nhận bản test:</strong></p>
<p>- phuongve</p>
<p><a href="http://vonews.net">- tibi886</a></p>
<p>-<a href="http://baonongsan.com/"> Gia ca phe</a></p>
<p>- Hoang phuc</p>
<p>- Mèo Khùng</p>
<p><a href="http://svxuantien.com/">- CAA Plus</a></p>
<p><a href="http://tin.mut.vn"> - Tin chấm mút</a></p>
]]></content:encoded>
			<wfw:commentRss>http://code24h.com/2011/vn-news-2-0-beta-ten-moi-presszine/feed/</wfw:commentRss>
		<slash:comments>140</slash:comments>
		</item>
		<item>
		<title>Thận trọng khi sử dụng Shortcode và tính năng SEO có sẵn của các theme wordpress</title>
		<link>http://code24h.com/2011/than-trong-khi-dung-shortcode-va-tinh-nang-seo-co-san-cua-cac-theme-wordpress/</link>
		<comments>http://code24h.com/2011/than-trong-khi-dung-shortcode-va-tinh-nang-seo-co-san-cua-cac-theme-wordpress/#comments</comments>
		<pubDate>Sat, 05 Nov 2011 09:37:46 +0000</pubDate>
		<dc:creator>max2max</dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[Thận trọng khi dùng Shortcode và tính năng SEO có sẵn của các theme wordpress]]></category>

		<guid isPermaLink="false">http://code24h.com/?p=450</guid>
		<description><![CDATA[Bài viết này dành cho những ai đã sử dụng hoặc đang có ý định sử dụng Shortcode hoặc tính năng SEO của một số theme. Những bạn đang muốn tìm cho mình một theme xịn cũng được khuyến nghị nên đọc. Trước tiên, mình xin giải thích khái niệm về tính năng Shortcode trong [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Bài viết này dành cho những ai đã sử dụng hoặc đang có ý định sử dụng Shortcode hoặc tính năng SEO của một số theme. Những bạn đang muốn tìm cho mình một theme xịn cũng được khuyến nghị nên đọc.</strong></p>
<p><img class="alignnone" title="WordPress Shortcode" src="http://www.shortcodekid.com/wp-content/uploads/2010/11/popups.gif" alt="" width="898" height="707" /></p>
<p><span id="more-450"></span></p>
<p>Trước tiên, mình xin giải thích khái niệm về tính năng Shortcode trong WordPress (những bạn biết rồi có thể bỏ qua phần này).</p>
<blockquote><p>&#8220;Shortcode là một đoạn mã ngắn gọn (hầu hết là do người viết theme, plugin tạo ra) dùng để thay thế cho những đoạn mã dài dòng khó nhớ. Đặc biệt, Shortcode có thể dùng ngay cả trong chế độ soạn thảo WYSIWYG của WordPress.&#8221;</p></blockquote>
<p>Ví dụ, để tạo ra một đoạn chữ được đặt trong một khung bo tròn màu vàng, ta dùng shortcode.</p>
<pre>[rounded color="yellow"]Đoạn chữ sẽ được đặt trong khung bo tròn màu vàng[/rounded]</pre>
<p>Một số ví dụ khác về shortcode:</p>
<p><img class="aligncenter" title="Shortcode WordPress" src="http://cdn.ourtutscom.netdna-cdn.com/wp-content/uploads/2010/12/boxes.jpg" alt="" width="580" height="428" />Tính năng này thật tuyệt vời, nó giúp chúng ta tiết kiệm rất nhiều thời gian để tạo nên những bài viết với định dạng đẹp, nó cũng giúp những người không biết HTML cũng có thể tạo cho mình những kiểu bài viết ưng ý.</p>
<p>Nhưng, khoan đã&#8230; chắc các bạn vừa nhớ. Mình vừa nói <em>&#8220;phần lớn các shortcode đều do những nhà phát triển theme, plugin nghĩ ra&#8221;</em>. Vì vậy, đây chính là nhược điểm, nhược điểm rất lớn mà bạn sẽ phải trả giá đắt khi muốn chuyển theme. Để mình lấy ví dụ.</p>
<p>Nếu theme của bạn sử dụng shortcode có tên <strong>[rounded]</strong> để hiển thị nội dung được bo tròn như trên ví dụ, nhưng rồi một ngày, bạn muốn chuyển sang một theme khác, theme này không hỗ trợ shortcode<strong> [rounded]</strong>, thay vào đó là<strong> [notice]</strong> thì sao nhỉ? Thay vì những style được bo tròn đẹp mắt, bạn sẽ nhận được nguyên đoạn chữ.</p>
<pre>[rounded] Nội dung đoạn chữ [/rounded]</pre>
<p>Để khắc phục vấn đề này cũng rất đơn giản, chỉ cần vào những bài viết có đoạn [rounded] và sửa thành notice là được. Nhưng nếu blog của bạn có 100 hoặc thậm chí 1000 bài viết thì sao nhỉ. Đó hẳn là cơn ác mộng với bạn.</p>
<p>Tương tự như vậy, với các theme hỗ trợ SEO (cho phép viết lại tiêu đề, meta ở mỗi bài viết&#8230;), bạn cũng sẽ gặp phải những rắc rối như với shortcode. Tất nhiên, vấn đề này dễ xử lý hơn vì một số theme có tính năng import SEO Settings từ theme khác nhưng đâu phải theme nào cũng được hỗ trợ tính năng này và biết đâu một ngày đẹp trời nào đó, họ ngừng cung cấp tính năng này thì sao?</p>
<p><strong>Nếu các bạn còn chưa hiểu hết vấn đề thì mình chỉ xin lấy ví dụ như sau:</strong> Các bạn đang sử dụng Vn-News của bác Hieudt, mỗi lần muốn thêm ảnh thumbnail, các bạn dán link xuống ô &#8220;Thumbnail&#8221; bên dưới, và nó sẽ lưu vào custom field một trường tên là &#8220;thumbnail&#8221;. Một ngày đẹp trời nào đó, bác Hutek chia sẻ một theme  rất đẹp và miễn phí có tên là vPress. Các bạn chuyển ngay sang theme này và &#8230; blah blah blah&#8230; phải sửa lại tất cả custom field thành in_image hoặc out_image để có thể hiển thị ra thumbnail&#8230;</p>
<p><strong>Đây chỉ là một số ví dụ nhỏ để các bạn dễ hiểu, còn nhiều lý do nữa&#8230;</strong></p>
<p>Tất nhiên, mình không phủ nhận ích lợi của những plugin này nhưng lời khuyên duy nhất của mình là&#8230; dùng plugin để làm việc này vì plugin có thể làm việc trên mọi theme (trừ khi bị conflict), nhưng trường hợp này rất hiếm, khi thay đổi theme, các thuộc tính của plugin vẫn không bị mất&#8230; Còn nếu bạn lười, không thích xài plugin free hoặc không có tiền mua license plugin hoặc vì một lý do nào đó mà nhất quyết phải sử dụng những tính năng có sẵn trong theme này thì bạn phải chắc chắn rằng sẽ sử dụng theme này (hoặc những theme cùng hãng với theme này) mãi mãi&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://code24h.com/2011/than-trong-khi-dung-shortcode-va-tinh-nang-seo-co-san-cua-cac-theme-wordpress/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>Vn-News 2.0 &#8211; Có gì hot?</title>
		<link>http://code24h.com/2011/nhung-thay-doi-cua-vn-news-2/</link>
		<comments>http://code24h.com/2011/nhung-thay-doi-cua-vn-news-2/#comments</comments>
		<pubDate>Mon, 24 Oct 2011 05:57:35 +0000</pubDate>
		<dc:creator>max2max</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Themes]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[theme united]]></category>
		<category><![CDATA[vn-news]]></category>

		<guid isPermaLink="false">http://code24h.com/?p=445</guid>
		<description><![CDATA[Sau nhiều lần trễ hẹn, cuối cùng phiên bản thứ 2 của Vn-News 2.0 beta đã được hoàn thành, thay đổi hoàn toàn về cấu trúc, giao diện và các tính năng. A. Đối với Webmaster. Tính năng đầu tiên và cũng là tính năng quan trọng nhất &#8211; SEO Vn-News 2.0 hỗ trợ toàn [...]]]></description>
			<content:encoded><![CDATA[<p>Sau nhiều lần trễ hẹn, cuối cùng phiên bản thứ 2 của Vn-News 2.0 beta đã được hoàn thành, thay đổi hoàn toàn về cấu trúc, giao diện và các tính năng.<br />
<img class="aligncenter" title="Vn-News 2.0" src="http://o5.com/wp-content/uploads/2011/07/question-mark.jpg" alt="" width="440" height="408" /></p>
<p><span id="more-445"></span></p>
<h2>A. Đối với Webmaster.</h2>
<p><strong>Tính năng đầu tiên và cũng là tính năng quan trọng nhất &#8211; SEO</strong></p>
<p>Vn-News 2.0 hỗ trợ toàn diện về SEO bao gồm: Tối ưu tốc độ, cho phép viết lại Title, các thẻ Meta&#8230; không hề kém cạnh Thesis, Genesis hay Hybrid.</p>
<p><strong>Cơ chế lấy ảnh cực kỳ đa dạng và linh hoạt.</strong></p>
<p>Nếu bạn đã từng sử dụng plugin <em>Get The Image</em> của <em>Justin Tadlock</em> thì bạn sẽ biết cơ chế lấy ảnh linh hoạt như thế nào.</p>
<p>Thứ tự lấy ảnh như sau: <em>Custom Field, Thumbnail, Attachment, Ảnh trong bài viết và ảnh mặc định.</em></p>
<p>Bạn có thể: <em>Cắt ảnh, cắt ảnh ngay cả khi ảnh đặt ở host khác và resize hình ảnh.</em></p>
<p><span style="text-decoration: underline;">Bạn cũng có thể:</span> <em>Tùy chỉnh cắt ảnh đối với bài viết này mà không cắt ảnh ở trong bài viết khác.</em></p>
<p><strong>Rất nhiều widget.</strong></p>
<p>Vn-News 2.0 hỗ trợ tới 10+ vị trí đặt widget và 3+ widget dựng sẵn bao gồm:</p>
<p><em>- United Ultimate Posts:</em> Cho phép hiển thị danh sách các bài viết mới nhất, bài viết cùng chuyên mục, bài viết ngẫu nhiên, bài viết xem nhiều nhất, bài viết được comment nhiều nhất và bài viết sắp xuất hiện. Widget này rất mạnh, cho phép bạn tùy chỉnh kích thước thumbnail, độ dài nội dung&#8230;</p>
<p><em>- United Ultimate Comments:</em> Hiển thị các comment mới nhất, top commentors có kèm avatar.</p>
<p><em>- United Twitter:</em> Hiển thị các tweet với nhiều kiểu lựa chọn.</p>
<p><em>- United Facebook</em>: Hiển thị các widget của Facebook</p>
<p><strong>40+ Shortcodes</strong></p>
<p>Đặc biệt ở phiên bản này, bạn có thể sử dụng shortcodes, giúp bạn trình bày nội dung một cách nhanh chóng và đẹp mắt. Vn-News 2.0 cũng cho phép bạn sử dụng BB Codes giống kiểu forum VBB. Ví dụ, để hiển thị hình ảnh, bạn chỉ cần bôi đen link hình ảnh và bấm nút Quick Add Image. Bạn sẽ có shortcode dạng:</p>
<blockquote><p><img src=" link-hinh-anh " alt="image" title="image" /></p></blockquote>
<p>Tương tự như vậy, nếu bạn làm 1 website chuyên về download, có thể chọn Shortcodes Download&#8230;</p>
<p><strong>Post Formats, Page Templates:</strong></p>
<p>Vn-News 2.0 hỗ trợ 5+ post format, 10+ page templates và sẽ còn gia tăng trong các phiên bản tiếp theo.</p>
<p><strong>Color Schemes:</strong></p>
<p>Với tính năng color scheme, bạn có thể lựa chọn các tông màu khác nhau cho website.</p>
<p><strong>Layout:</strong> Rất nhiều layout mới đang chờ đón bạn.</p>
<p><strong>Cross Browser:</strong> Vn-News 2.0 tương thích với mọi trình duyệt (kể cả IE6).</p>
<p>Và rất nhiều các tính năng khác&#8230;</p>
<h2>B. Với Developer:</h2>
<p>Vn-News 2.0 viết rất đơn giản, dễ hiểu. Các bạn rất dễ dàng chỉnh sửa.</p>
<p>Vn-News 2.0 có sẵn class helper, giúp bạn dễ dàng thiết kế và phát triển.</p>
<p>Vn-News 2.0 có sẵn rất nhiều class, component giúp rút gọn quá trình thiết kế web.</p>
<p>Tất cả sẽ được công bố sau ngày 11/11/2011.</p>
<p>Hi vọng nhận được sự đóng góp và ủng hộ nhiệt tình của các bạn. <img src='http://code24h.com/wp-content/smiles/gracias.gif' alt=':)' class='wp-smiley' /> </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://code24h.com/2011/nhung-thay-doi-cua-vn-news-2/feed/</wfw:commentRss>
		<slash:comments>65</slash:comments>
		</item>
		<item>
		<title>Timthumb cho host ngoài.</title>
		<link>http://code24h.com/2010/timthumb-cho-host-ngoai/</link>
		<comments>http://code24h.com/2010/timthumb-cho-host-ngoai/#comments</comments>
		<pubDate>Fri, 12 Nov 2010 02:51:00 +0000</pubDate>
		<dc:creator>max2max</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[WP-Hack]]></category>

		<guid isPermaLink="false">http://code24h.com/?p=378</guid>
		<description><![CDATA[Chào các bạn, đã lâu lắm rồi max chưa viết được bài nào do vướng chuyện học hành và làm một số project. Đã có rất nhiều người từng thắc mắc rằng &#8230; &#8220;Tại sao ảnh trong theme của tôi không hoạt động?&#8221;, &#8220;Tại sao tôi đã chèn link ảnh đúng theo hướng dẫn mà [...]]]></description>
			<content:encoded><![CDATA[<p>Chào các bạn, đã lâu lắm rồi max chưa viết được bài nào do vướng chuyện học hành và làm một số project.</p>
<p>Đã có rất nhiều người từng thắc mắc rằng &#8230; &#8220;Tại sao ảnh trong theme của tôi không hoạt động?&#8221;, &#8220;Tại sao tôi đã chèn link ảnh đúng theo hướng dẫn mà không được&#8221; hay &#8220;Làm thế nào để tôi có thể chèn ảnh thumbnail từ host ngoài mà vẫn sử dụng chức năng cắt ảnh của timthumb&#8221; (Host ngoài như: Tinypics, Imageshack, Photobucket, Flickr&#8230;)</p>
<p><img class="alignnone" title="Timthumb cho host ngoài" src="http://www.wpwebhost.com/wp-content/uploads/2011/08/timthumb.jpg" alt="" width="540" height="383" /></p>
<p>Mình thử nghiên cứu về vấn đề này nhưng cũng không thể làm được do khả năng và thời gian còn bị giới hạn khá nhiều. Đã có một số bạn gửi cho mình một số module cắt ảnh của Joomla để mình tích hợp vào WordPress nhưng dung lượng lớn quá (~200kb) nên mình không thể ứng dụng được.</p>
<p>Và mình tình cờ tìm được file timthumb.php được modify lại để có thể cắt ảnh từ host ngoài. Nói là cắt ảnh từ host ngoài thì cũng không hoàn toàn đúng, bởi vì nó download về host của bạn trước khi tiến hành cắt vì thế host của bạn vẫn phải hỗ trợ thư viện GD.</p>
<p><span id="more-378"></span></p>
<p>Ưu điểm:</p>
<p>- Tiết kiệm thời gian đăng bài và backup (Bạn nào thường xuyên chuyển host thì sẽ thấy bất tiện thế nào và có ảnh bên ngoài thì thật là tuyệt)</p>
<p>Nhược điểm:</p>
<p>- File này tự động download về máy, vì thế CPU sẽ load cao hơn.</p>
<p>- Không hề tiết kiệm băng thông tẹo nào.</p>
<p>Cài đặt</p>
<p>- Copy đoạn code của timthumb về</p>
<p>- Tiến hành cài đặt như các file timthumb khác hoặc chép đè vào file timthumb.php nếu theme của các bạn đã có file này rồi.</p>
<p>- Have fun!</p>
<p>&lt;&#8221; Mình nói vậy không biết có bạn nào chưa hiểu không, nếu chưa hiểu thì cứ mạnh dạn hỏi nhé&#8221; &gt;</p>
<p>[codesyntax lang="php"]</p>
<pre>&lt;?php

// TimThumb script created by Tim McDaniels and Darren Hoyt with tweaks by Ben Gillbanks
// http://code.google.com/p/timthumb/

// MIT License: http://www.opensource.org/licenses/mit-license.php

/* Parameters allowed: */

// w: width
// h: height
// zc: zoom crop (0 or 1)
// q: quality (default is 75 and max is 100)

// HTML example: &lt;img src="/scripts/timthumb.php?src=/images/whatever.jpg&amp;w=150&amp;h=200&amp;zc=1" alt="" /&gt;

error_reporting(E_ALL);

if(!isset($_REQUEST["src"])) {
    die("no image specified");
}

// clean params before use
$src = clean_source( $_REQUEST[ "src" ] );

// set document root
$doc_root = get_document_root($src);

// get path to image on file system
if(!preg_match('/http\:\/\//',$src)){
    $src = $doc_root . '/' . $src;
}
$new_width = preg_replace( "/[^0-9]+/", "", get_request( 'w', 100 ) );
$new_height = preg_replace( "/[^0-9]+/", "", get_request( 'h', 100 ) );
$zoom_crop = preg_replace( "/[^0-9]+/", "", get_request( 'zc', 1 ) );
$quality = preg_replace( "/[^0-9]+/", "", get_request( '9', 80 ) );

// set path to cache directory (default is ./cache)
// this can be changed to a different location
$cache_dir = './cache';

// get mime type of src
$mime_type = mime_type($src);

// check to see if this image is in the cache already
//check_cache($cache_dir, $mime_type);

// make sure that the src is gif/jpg/png
if(!valid_src_mime_type($mime_type)) {
    die("Invalid src mime type: $mime_type");
}

// check to see if GD function exist
if(!function_exists('imagecreatetruecolor')) {
    die("GD Library Error: imagecreatetruecolor does not exist");
}

if(strlen($src)) {

    // open the existing image
    $image = open_image($mime_type, $src);
    if($image === false) {
        die('Unable to open image : ' . $src);
    }

    // Get original width and height
    $width = imagesx($image);
    $height = imagesy($image);

    // don't allow new width or height to be greater than the original
    if( $new_width &gt; $width ) {
        $new_width = $width;
    }
    if( $new_height &gt; $height ) {
        $new_height = $height;
    }

    // generate new w/h if not provided
    if( $new_width &amp;&amp; !$new_height ) {

        $new_height = $height * ( $new_width / $width );

    } elseif($new_height &amp;&amp; !$new_width) {

        $new_width = $width * ( $new_height / $height );

    } elseif(!$new_width &amp;&amp; !$new_height) {

        $new_width = $width;
        $new_height = $height;

    }

    // create a new true color image
    $canvas = imagecreatetruecolor( $new_width, $new_height );

    if( $zoom_crop ) {

        $src_x = $src_y = 0;
        $src_w = $width;
        $src_h = $height;

        $cmp_x = $width  / $new_width;
        $cmp_y = $height / $new_height;

        // calculate x or y coordinate and width or height of source

        if ( $cmp_x &gt; $cmp_y ) {

            $src_w = round( ( $width / $cmp_x * $cmp_y ) );
            $src_x = round( ( $width - ( $width / $cmp_x * $cmp_y ) ) / 2 );

        } elseif ( $cmp_y &gt; $cmp_x ) {

            $src_h = round( ( $height / $cmp_y * $cmp_x ) );
            $src_y = round( ( $height - ( $height / $cmp_y * $cmp_x ) ) / 2 );

        }

        imagecopyresampled( $canvas, $image, 0, 0, $src_x, $src_y, $new_width, $new_height, $src_w, $src_h );

    } else {

        // copy and resize part of an image with resampling
        imagecopyresampled( $canvas, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height );

    }

    // output image to browser based on mime type
    show_image( $mime_type, $canvas, $quality, $cache_dir );

    // remove image from memory
    imagedestroy( $canvas );

} else {

    if(strlen($src)) {
        die($src . ' not found.');
    } else {
        die('no source specified.');
    }

}

function show_image( $mime_type, $image_resized, $quality, $cache_dir ) {

    // check to see if we can write to the cache directory
    $is_writable = 0;
    $cache_file_name = $cache_dir . '/' . get_cache_file();            

    if(@touch($cache_file_name)) {

        // give 666 permissions so that the developer
        // can overwrite web server user
        chmod($cache_file_name, 0666);
        $is_writable = 1;

    } else {

        $cache_file_name = NULL;
        header('Content-type: ' . $mime_type);

    }

    if(stristr($mime_type, 'gif')) {

        imagegif($image_resized, $cache_file_name);

    } elseif(stristr($mime_type, 'jpeg')) {

        imagejpeg($image_resized, $cache_file_name, $quality);

    } elseif(stristr($mime_type, 'png')) {

        $quality = floor($quality * 0.09);
        imagepng($image_resized, $cache_file_name, $quality);

    }

    if($is_writable) {
        show_cache_file( $cache_dir, $mime_type );
    }

    die();

}

function get_request( $property, $default = 0 ) {

    if( isset($_REQUEST[$property]) ) {
        return $_REQUEST[$property];
    } else {
        return $default;
    }

}

function open_image($mime_type, $src) {

    if(stristr($mime_type, 'gif')) {

        $image = imagecreatefromgif($src);

    } elseif(stristr($mime_type, 'jpeg')) {

        @ini_set('gd.jpeg_ignore_warning', 1);
        $image = imagecreatefromjpeg($src);

    } elseif( stristr($mime_type, 'png')) {

        $image = imagecreatefrompng($src);

    }

    return $image;

}

function mime_type($file) {

    $os = strtolower(php_uname());
    $mime_type = '';

    // use PECL fileinfo to determine mime type
    if( function_exists('finfo_open')) {
        $finfo = finfo_open(FILEINFO_MIME);
        $mime_type = finfo_file($finfo, $file);
        finfo_close($finfo);
    }

    // try to determine mime type by using unix file command
    // this should not be executed on windows
    if(!valid_src_mime_type($mime_type) &amp;&amp; !(strstr('windows', $os))) {
        if(preg_match("/freebsd|linux/", $os)) {
            $mime_type = trim(@shell_exec('file -bi $file'));
        }
    }

    // use file's extension to determine mime type
    if(!valid_src_mime_type($mime_type)) {

        // set defaults
        $mime_type = 'image/jpeg';
        // file details
        $fileDetails = pathinfo($file);
        $ext = strtolower($fileDetails["extension"]);
        // mime types
        $types = array(
             'jpg'  =&gt; 'image/jpeg',
             'jpeg' =&gt; 'image/jpeg',
             'png'  =&gt; 'image/png',
             'gif'  =&gt; 'image/gif'
         );

        if(strlen($ext) &amp;&amp; strlen($types[$ext])) {
            $mime_type = $types[$ext];
        }

    }

    return $mime_type;

}

function valid_src_mime_type($mime_type) {

    if(preg_match("/jpg|jpeg|gif|png/i", $mime_type)) {
        return true;
    }
    return false;

}

function check_cache($cache_dir, $mime_type) {

    // make sure cache dir exists
    if(!file_exists($cache_dir)) {
        // give 777 permissions so that developer can overwrite
        // files created by web server user
        mkdir($cache_dir);
        chmod($cache_dir, 0777);
    }

    show_cache_file($cache_dir, $mime_type);

}

function show_cache_file($cache_dir, $mime_type) {

    $cache_file = $cache_dir . '/' . get_cache_file();

    if( file_exists( $cache_file ) ) {

        if( isset( $_SERVER[ "HTTP_IF_MODIFIED_SINCE" ] ) ) {

            // check for updates
            $if_modified_since = preg_replace( '/;.*$/', '', $_SERVER[ "HTTP_IF_MODIFIED_SINCE" ] );
            $gmdate_mod = gmdate( 'D, d M Y H:i:s', filemtime( $cache_file ) );

            if( strstr( $gmdate_mod, 'GMT' ) ) {
                $gmdate_mod .= " GMT";
            }

            if ( $if_modified_since == $gmdate_mod ) {
                header( "HTTP/1.1 304 Not Modified" );
                exit;
            }

        }

        $fileSize = filesize($cache_file);

        // send headers then display image
        header("Content-Type: " . $mime_type);
        //header("Accept-Ranges: bytes");
        header("Last-Modified: " . gmdate('D, d M Y H:i:s', filemtime($cache_file)) . " GMT");
        header("Content-Length: " . $fileSize);
        header("Cache-Control: max-age=9999, must-revalidate");
        header("Expires: " . gmdate("D, d M Y H:i:s", time() + 9999) . "GMT");

        readfile($cache_file);

        die();

    }

}

function get_cache_file () {

    global $quality;

    static $cache_file;
    if(!$cache_file) {
        $frags = explode(".", $_REQUEST['src'] );
        $ext = strtolower( $frags[ count( $frags ) - 1 ] );
        if(!valid_extension($ext)) { $ext = 'jpg'; }
        $cachename = get_request( 'src', 'timthumb' ) . get_request( 'w', 100 ) . get_request( 'h', 100 ) . get_request( 'zc', 1 ) . get_request( '9', 80 );
        $cache_file = md5( $cachename ) . '.' . $ext;
    }
    return $cache_file;

}

function valid_extension ($ext) {

    if( preg_match( "/jpg|jpeg|png|gif/i", $ext ) ) return 1;
    return 0;

}

function clean_source ( $src ) {

    // remove http/ https/ ftp
    //$src = preg_replace("/^((ht|f)tp(s|):\/\/)/i", "", $src);
    // remove domain name from the source url
    $host = $_SERVER["HTTP_HOST"];
    $src = str_replace($host, "", $src);
    $host = str_replace("www.", "", $host);
    $src = str_replace($host, "", $src);

    //$src = preg_replace( "/(?:^\/+|\.{2,}\/+?)/", "", $src );
    //$src = preg_replace( '/^\w+:\/\/[^\/]+/', '', $src );

    // don't allow users the ability to use '../'
    // in order to gain access to files below document root

    // src should be specified relative to document root like:
    // src=images/img.jpg or src=/images/img.jpg
    // not like:
    // src=../images/img.jpg
    $src = preg_replace( "/\.\.+\//", "", $src );

    return $src;

}

function get_document_root ($src) {
    if( @file_exists( $_SERVER['DOCUMENT_ROOT'] . '/' . $src ) ) {
        return $_SERVER['DOCUMENT_ROOT'];
    }
    // the relative paths below are useful if timthumb is moved outside of document root
    // specifically if installed in wordpress themes like mimbo pro:
    // /wp-content/themes/mimbopro/scripts/timthumb.php
    $paths = array( '..', '../..', '../../..', '../../../..' );
    foreach( $paths as $path ) {
        if( @file_exists( $path . '/' . $src ) ) {
            return $path;
        }
    }

}

<a href="http://code24h.com/2010/timthumb-cho-host-ngoai/wordpress_wallpaper_on_wood_by_fran6/" rel="attachment wp-att-390"><img class="aligncenter size-medium wp-image-390" title="Wordpress_Wallpaper_on_Wood_by_fran6" src="http://code24h.com/wp-content/uploads/Wordpress_Wallpaper_on_Wood_by_fran6-300x225.jpg" alt="" width="300" height="225" /></a>?&gt;</pre>
<p>[/codesyntax]</p>
]]></content:encoded>
			<wfw:commentRss>http://code24h.com/2010/timthumb-cho-host-ngoai/feed/</wfw:commentRss>
		<slash:comments>61</slash:comments>
		</item>
		<item>
		<title>Bài 11. Kiểu chuỗi (xâu)</title>
		<link>http://code24h.com/2010/bai-11-kieu-chuoi-xau/</link>
		<comments>http://code24h.com/2010/bai-11-kieu-chuoi-xau/#comments</comments>
		<pubDate>Mon, 30 Aug 2010 07:50:32 +0000</pubDate>
		<dc:creator>max2max</dc:creator>
				<category><![CDATA[Pascal]]></category>

		<guid isPermaLink="false">http://code24h.com/?p=332</guid>
		<description><![CDATA[Kiểu chuỗi (String) cho phép ta lưu trữ giá trị ở dạng bảng chữ cái gồm một dãy ký tự(khác với kiểu Char chỉ là một ký tự). Khai báo: var &#60;tên biến&#62;:string[max]; Ví dụ [codesyntax lang="pascal"] var hoten:string[30]; var socmt:string; [/codesyntax] Chú ý: Nếu không khai báo độ dài max, thì max = 255; [...]]]></description>
			<content:encoded><![CDATA[<p><!-- 		@page { margin: 0.79in } 		P { margin-bottom: 0.08in } -->Kiểu chuỗi (String) cho phép ta lưu trữ giá trị ở dạng bảng chữ cái gồm một dãy ký tự(khác với kiểu Char chỉ là một ký tự).</p>
<p>Khai báo:</p>
<blockquote><p><strong> var &lt;tên biến&gt;:string[max];</strong></p></blockquote>
<p>Ví dụ</p>
<p><span id="more-332"></span></p>
<p>[codesyntax lang="pascal"]</p>
<pre>var hoten:string[30];

var socmt:string;</pre>
<p>[/codesyntax]</p>
<p>Chú ý: Nếu không khai báo độ dài max, thì max = 255; tức là chuỗi đó có tối đa 255 ký tự.</p>
<p>Các thao tác xử lý chuỗi</p>
<ol>
<li>Ghép xâu (Nối xâu)</li>
<li>So sánh</li>
<li>Xoá (Delete)</li>
<li>Chèn (Insert)</li>
<li>Sao chép (Copy)</li>
<li>Độ dài (Length)</li>
<li>Vị trí (Pos)</li>
<li>Upcase</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://code24h.com/2010/bai-11-kieu-chuoi-xau/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

