Tag Archive folder

Byphunsanit

WSL: mkdir สร้าง windows folder ใหม่

วิธีสร้าง folder ใหม่โดยปกติจะมีรูปแบบ mkdir { folder path } ใน wsl สามารถสร้าง folder ในวินโดว์ได้โดยใช้รูปแบบ sudo mkdir /mnt/{ drive letter }/{ folder path } เช่น จะสร้าง C:\UsersDatas\var\www\prototypes_laravel จะใช้ จะใช้ command
sudo mkdir /mnt/c/UsersDatas/var/www/prototypes_laravel
แต่ถ้าหากไม่มี folder C:\UsersDatas\var\www มาก่อนจะมี error แสดง
mkdir: cannot create directory ‘/mnt/c/UsersDatas/var/www/prototypes_laravel’: No such file or directory
แก้ได้โดยใช้ parameter -p เช่น

sudo mkdir -p /mnt/c/UsersDatas/var/www/prototypes_laravel

ก็จะสร้าง C:\UsersDatas\var\www\prototypes_laravel ตามที่ต้องการ

อ่านเพิ่มเติม WSL: Creating links shortcut


Byphunsanit

เขียนหน้า 404 แบบง่ายๆ

เป็นธรรมดาที่เวลาเว็บมีอายุนานๆ แล้วจะมีการที่เพิ่มลดหน้าเพจ มีภาพที่โดนลบออก มีโดนย้ายตำแหน่ง รวมถึงพวก hacker ที่พยามจะมาเดินเล่นหา file ต่างๆ ที่อาจจะสามารถใช้รวบรวมข้อมูลไปทำอันตรายต่างๆได้ หลายๆเว็บจึงทำหน้า 404 not found ไว้ เพื่อ

  • บอกว่าไฟล์นี่ไม่มีแล้วนะ
  • พา user ไปหน้า search ข้อมูล หรือหน้าที่รวมความช่วยเหลือ
  • ป้องกันไม่ให้มาค้นหาไฟล์อะไรง่ายๆ โดยการเดาชื่อไฟล์ เพราะจะได้หน้านี้กลับไป เป็นการถ่วงเวลาอย่างหนึ่งให้ระบบตรวจจับการบุกรุกสามารถเห็นได้ง่ายขึ้น

    สร้างไฟล์ .htaccess ไว้ใน folder หลักของเว็บ หรือ directory ที่ต้องการ โดยเขียน

    RewriteEngine on
    
    RewriteRule (.*) 404.html [L]
    

    ถ้ามีคำสั้่งอื่นๆ อยู่แล้ว ก็ให้ใส่คำสั่ง RewriteRule (.*) 404.html [L] ไว้ล่างสุด และเขียนไฟล์ 404.html ไว้เนื้อหาภายในก็เปลี่ยนไปตามจุดประสงค์ที่ต้องการ จะแค่ภาพ 404 ที่มีตามเน็ตก็ได้

Byphunsanit

default file รูปด้วย .htaccess

ทำระบบสมาชิกโดยแต่ละ user จะมีภาพประจำตัว โดยเก็บในรูปแบบ \datas\peoples\id ของ user.jpg แต่บางคน (ส่วนใหญ่) ไม่ส่งภาพมา แต่ในหลายๆ หน้าจะมีจุดที่แสดงภาพสมาชิก

มี 2 ทางเลือกคือ

  • ใช้คำสั่ง file_exists ตรวจสอบดูว่ามีไฟล์นี้รึเปล่า ถ้ามีก็เอาภาพไปแสดง ถ้าไม่ก็แสดงภาพเป็นเงาดำๆ ให้ดูไป
  • อีกวิธีคือ แสดงภาพเหมือนว่ามีไฟล์นี้จริงๆ แต่ถ้าหาไฟล์ไม่เจอก็ให้ server ไปดึงไฟล์ดีฟอล์ตมาแสดง โดยใน code ไม่ต้องตรวจสอบอะไรเลย

วิธีการคือ สร้างไฟล์ .htaccess ใน \datas\peoples\ โดยมีเนื้อหาคือ

RewriteEngine on

# If requested resource exists as a file or directory go to it
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule (.*) - [L]

# Else rewrite requests for non-existent .jpg to default.jpg
RewriteRule (.jpg$) default.jpg [L]

# Else rewrite requests for non-existent resources to 404.html
RewriteRule (.*) ../404.html [L]

เมื่อมีการเรียกใช้ภาพ .jpg มาใน folder \datas\peoples\ ตัว apache จะไปหาก่อนว่าไฟล์นั้นมีหรือเปล่า ถ้าไม่มีก็จะใช้ไฟล์ default.jpg มาแสดงแทน แค่นี้ก็ไม่ต้องตรวจสอบทุกจุดที่แสดงภาพแล้วว่ามีภาพจริงๆ หรือเปล่า

ถ้าใช้ git อ่านเรื่อง git: ไม่สนไฟล์ในโพลเดอร์นี้ ยกเว้น ด้วย

Byphunsanit

1 ภาพ 1,000 ข้อมูล

ต้องการจะเก็บภาพโดยเก็บตามวันที่ ที่โดนถ่าย เหมือนใน Camera Roll เพราะว่าภาพ TIFF, JPEG, WAV จะมีข้อมูล meta data ที่เรียกว่า Exchangeable image file format (Exif) ที่จะใส่ข้อมูลที่ถูกบันทึกไว้ตอนที่ถ่ายไว้โดยใช้กล้องดิจิติล มีข้อมูลสำคัญๆ อย่าง ถ่ายกับกล้องอะไร Manufacturer, Model เวลาที่ภาพถูกถ่าย Date and Time (original) มีการแต่งภาพรึเปล่า เมื่อไหร่ Date and Time (digitized) และถ่ายที่ไหน

ใน php เราสามารถใช้ function exif_read_data ดึงข้อมูลออกมาให้ใช้จัดการกับรูปได้ จะย้ายภาพไปเก็บไว้ตามวันที่ที่ถ่าย หรือตามสถานที่

<?php

/* fix maximum execution time */
set_time_limit(0);

/* find file */
$root = 'Photos';
echo'<dl>';
foreach (glob($root."/*.{jpeg,JPEG,jpg,JPG}", GLOB_BRACE) as $filename) {

	if($exif = exif_read_data($filename, 'IFD0'))
	{

		$date = date('Y-m-d', strtotime($exif['DateTimeOriginal']));

	    /* create folder */
	    $dir = $root.'/'.$date;
	    if (!is_dir($dir)) {
	        mkdir($dir, 0644, true);
	    }

	    /* move file */
	    $path = explode('/', $filename);
	    $newFile = $dir.'/'.$path[1];
	    rename($filename, $newFile);

	    echo '<dt>',$filename,'</dt>',
	    '<dd>',$newFile,'</dd>';

	}

}
echo'</dl>',
'<h1>Compleate!</h1>';
Byphunsanit

ย้ายไฟล์ลง folder ตามวันที่

เดิมไฟล์ backup ถูกเก็บในรูปแบบ ปี เดือน วัน โปรเจ็ค เช่น 2015-07-10-joomla.sql, 2015-07-10-joomla.zip, 2015-07-10-prestashop.sql, 2015-07-10-prestashop.zip ทุกๆวัน วันละ 4 ไฟล์ ถ้าเก็บแบบนี้ทุกวันก็จะมีไฟล์ 1,440 ไฟล์ เริ่มจะรก จะลบไฟล์แบ็กอัพเก่าๆ ออกก็ไม่สดวก ถ้ามีโปรเจ็คที่ต้องดูแลมากกว่านี้

ก็มีความคิดว่า ทำไม่ไม่เก็บ backup เป็น directory ปี เดือน วัน ละ เวลาลบจะได้ง่ายๆ อยากจะลบปีก่อนทั้งปี ก็แค่คลิก 2 ครั้งก็เสร็จ ลบ 3 เดือนที่แล้วก็ไม่ยาก มันแยกไว้อยู่แล้ว แต่ก่อนอื่นก็ต้องย้ายไปเก็บให้ถูกที่ก่อน

PHP มี function glob ช่วยหาไฟล์ตามรูปแบบอยู่ ทำให้เขียน code หาไฟล์ตามรูปแบบได้ ไม่ยากนัก

<?php
/* find file */
$root = 'backup';
foreach (glob($root.'/*-*') as $filename) {
	/* get path */
	$path = explode('/', $filename);
	list($year, $month, $date) = explode('-', $path[1]);

	/* create folder */
	$dir = $root.'/'.$year.'/'.$month.'/'.$date;
	if (!is_dir($dir)) {
		mkdir($dir, 0644, true);
	}

	/* move file */
	rename($filename, $dir.'/'.$path[1]);

}
rt :
สร้างโฟลเดอร์ตัวอักษรไทย
คัดลอกหมดทั้งโฟลเดอร์
Byphunsanit

คัดลอกหมดทั้งโฟลเดอร์

โปรเจ็คที่ทำอยู่ตอนนี้ ทางลูกค้าต้องการให้สามารถ สร้างระบบย่อยได้เอง จะทำงานคล้ายๆกัน แต่ละส่วนสามารถปรับแต่งได้อิสระจากตัวอื่นๆ เช่น ใช้ logo ของบริษัทพันธมิตร โดยจะมีส่วนย่อยๆ นี้ตามจำนวนพันธมิตรที่เค้าหามาได้ และใน backed จะต้องสามารถสร้างขึ้นมาได้เอง โดยที่ไม่ต้องการให้โปรแกรมเมอร์ มาเซ็ตระบบเริ่มต้นให้

หนึ่งในกระบวนการที่คิดไว้ก็คือ แยก code ของแต่ละ partner ออกไปในอีกโพลเดอร์และใช้ php clone ออกไปทั้ง sub directory ไปไว้อีกที่ ให้แต่ละบริษัทใช้

<?php

function cloning($folderSource, $folderClone) {
	if (!@mkdir($folderClone, 0755)) {
		return error_get_last();
	}
	foreach ($iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($folderSource, \RecursiveDirectoryIterator::SKIP_DOTS), \RecursiveIteratorIterator::SELF_FIRST) as $item) {
		if ($item->isDir()) {
			mkdir($folderClone . DIRECTORY_SEPARATOR . $iterator->getSubPathName());
		} else {
			copy($item, $folderClone . DIRECTORY_SEPARATOR . $iterator->getSubPathName());
		}
	}
	return true;
}

$message = cloning('partner', 'partner_dolly');
if ($message === true) {
	echo 'Success';
} else {
	echo print_r($message, true);
}
Byphunsanit

ย้าย folder แบบเทพๆ แก้ backup ทำไดร์ฟซีเต็ม

ใครที่ใช้ iPhone / iPad ความจุสูงๆหน่อยไปซักพักจะเจอปัญหา iCloud เต็ม หรือจะเอาเครื่องไปเครมต้องสำรองข้อมูลเก็บไว้ มีทางเลือก 4 วิธีคือ

  1. เลือกไม่ backup บางส่วน ไม่ค่อยดีเท่าไหร่
  2. ซื้อพื้นที่ iCloud เพิ่มตามราคา iCloud storage pricing ถ้าใช้เดือนเดียวก็พอไหว ปัญหาคือเวลา backup มันช้ากว่าเก็บในเครื่องเราเยอะเลย ถ้าเครื่อง 64 GB เน็ตไม่เร็วจริงๆไม่อยากจะคิดว่าเมื่อไหร่จะเสร็จ
  3. ขยายพื้นที่ไดร์ฟซีใหม่ มือใหม่เสี่ยงสูงมากที่จะทำ windows พัง ต้องลงวินโดว์ ลงโปรแกรมใหม่ ไม่นับข้อมูลที่อาจหาย
  4. ย้ายโฟลเดอร์ที่ไอจูนใช้เก็บข้อมูลไปที่อื่น

เราจะใช้ NTFS junction point โดย junction points คือ เหมือนกับเราทำ shortcut ไว้เปิดไฟล์ตามที่ต่างๆ ไม่ต้องเข้าไปเปิดในที่เก็บไฟล์จริงๆ แต่แทนที่จะเป็นไฟล์ กลับเป็นโฟลเดอร์แทน ให้เหมือน folder อยู่ที่เดิม แต่จริงๆ แล้วมันวาร์ปไปเก็บไว้คนละที่ คนละ drive เลยก็ได้

Windows ที่สามารถทำได้ คือ Windows 2000/XP/2003/Vista/2008/วินโดวส์ 7/8/8.1 คือ เกือบทุกตัวนั่นละ แต่ไม่ค่อยมีใครทราบ ไม่ต้องกลัวไม่ได้ยากมีวิธีที่ง่ายๆ

  1. โหลด Junction Link Magic จาก http://www.rekenwonder.com/linkmagic.htm
    1. ลงโปรแกรม (กดแบบ next genration เลยครับ)
    2. เปิดขึ้นมา มันจะถามว่า Do you want to scan for junction links now? This may take a few minutes. กด no ไปเลยครับ ไม่ต้องสนใจ
  2. ปิด iTunes
  3. ไปที่ C:\Users\ชื่อ user ที่ใช้  login เข้า windows\AppData\Roaming\Apple Computer\MobileSync\Backup ถ้าไม่เห็น  folder  AppData เป็นเรื่องปกติครับ เพราะมันโดนซ่อนไว้ พิมพ์ด้านบนได้เลย
  4. ย้ายไฟล์ทั้งหมดใน  folder Backup ไปที่อื่น เช่น ผมเอาไปไว้ที่ D:\[–iPhone–]\Backup
  5. กด Create…
    1. ฝั่ง junction Point (host folder) เลือกโฟลเดอร์เดิม เช่น C:\Users\ชื่อ user ที่ใช้  login เข้า windows\AppData\Roaming\Apple Computer\MobileSync\Backup
    2. อีกด้าน Destination (target folder) เลือกที่เราย้ายไป เช่น D:\[–iPhone–]\Backup
    3. กด create
  6. เปิด iTunes
    1.  backup โดยเลือก This computer
    2. เลือก Encrypt iPhone backup (เผื่อทำเครื่อง notebook หาย ใครที่ได้ไปจะเปิดดูไฟล์ข้างในไม่ได้)
    3. ใส่ password

เสร็จแล้ว จะเห็นว่า จะมีไฟล์เพิ่มขี้นในที่ใหม่ เวลาเรา สั่งให้ iTunes backup ยังไงก็เร็วกว่าเอาข้อมูลสำรองไว้ในไอคลาวน์เยอะเลย ถูกกว่าด้วย (>‿◠)✌ หรือถ้าไม่อยากจะลงโปรแกรมก็ใช้ command ทำแบบ manual
http://www.iphoneapptube.com/tips-tricks/itunes-backup-drive-harddisk-tips

Byphunsanit

แก้ YII Assets ย้าย static cache folder

โดยปกติ yii จะเก็บไฟล์ static บางไฟล์ที่เป็น CSS, JavaScript ทั้งที่เป็น framework อย่าง jQuery หรือไฟล์ที่เกิดจากการใช้คำสั่ง Yii::app()->getClientScript()->registerScript(‘featured’ ,”…”); หรือ Yii::app()->clientScript->registerCoreScript(‘jquery’); ไว้ใน folder assets/ค่าสุ่ม บางครั้งเราแก้ไขไปแล้ว แต่ไฟล์พวกนี้ยัง cache ของเดิมอยู่เพราะว่า hash ไม่ได้ต่างจากเดิม หน้าเว็บจึงทำงานไม่ถูกต้องตามที่ตั้งใจไว้ วิธีแก้คือการที่จะต้องเข้าไปลบออกทั้งโฟลเดอร์ ซึ่งไม่สดวกนักเพราะว่าใน assets ยังมีไฟล์ที่เป็นดาต้าจริงๆ อยู่ด้วย ทางที่จึงควรแยกไฟล์ที่เป็น static cache พวกนี้ออกไปไว้ที่อื่นเพื่อความสดวกในการทดสอบและปลอดภัยของข้อมูล

สมมุติว่าสร้างโฟลเดอร์เก็บไฟล์ static cache ไว้ที่ D:/xampp/htdocs/yiiTest/assetsRuntime (user ต้องเข้าถึงได้จาก internet และต้องกำหนดให้ php มีสิทธิเขียน / ลบไฟล์ อย่างน้อย cmod ต้องเป็น 0755 ) แล้วไปที่ protectedconfig main.php เพิ่มบรรทัดตามตัวอย่าง

	'basePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..',
	'name'=>'My Web Application',
…
	// application components
	'components'=>array(
		'assetManager'=>array(
			'basePath'=>'D:/xampp/htdoc/syiiTest/assets/Runtime',
			'baseUrl'=>'/yiiTest/assetsRuntime/'
		),
…

อาจจะลบโฟลเดอร์ static cache ใน assets เก่าออก ครั้งต่อไปที่เขียนไฟล์ จะเขียนลงที่ใหม่

Byphunsanit

ลบโฟลเดอร์เปล่าๆ

ใช้เครื่องไปนานๆ ก็จะมีขยะเป็นธรรมดา บางทีโฟลเดอร์เปล่าๆ ที่ไม่มีข้อมูลอะไร แต่การทีจะหาที่ละจุดก็เสียเวลา มีคำสั่งง่ายๆ ที่จะช่วยเราลบทิ้ง รวมทั้งในกรณีที่เป็นโฟลเดอร์ว่างในโฟลเดอร์อื่น ไปโดยที่ไม่ต้องใช้โปรแกรมช่วยและไม่ต้องกลัวว่าจะลบผิดไปลบโฟลเดอร์ที่มีข้อมูลอยู่ แถมยังเร็วกว่ามาก

  • เข้าไปใช้ command โดย กดปุ่ม windows (ปุ่มรูปหน้าต่าง ตัวที่สอง แถวล่างสุด) พ���้อม��� ตัว r จะเห็นหน้าต่างเล็กๆ ถูกเปิดขึ้นมาใหม่
  • ก่อนอื่นเราจะให้โปรแกรมทำงานในไดร์ฟที่ต้องการ โดยถ้าจะลบในไดร์ฟ c พิมพ์ cd ../../ เอ็นเทอร์ ถ้าเป็นไดร์ฟอื่นๆ พิมพ์ชื่อไดร์ฟตามด้วย : อย่างไดร์ฟ d พิมพ์ d: แล้วเอ็นเทอร์
  • พิมพ์ for /f “delims=” %%d in (‘dir /s /b /ad ^| sort /r’) do rd “%%d” เอ็นเทอร์ เป็นอันเสร็จพิธี

ดูเพิ่มเติม