Sendmail Menggunakan Relayhost Luar

Sunday, March 29, 2015

Situasi: Perlu hantar e-mail kepada 3 domain yang berlainan. Gmail (google), MIMOS (syarikat) dan KPDNKK (kerajaan). Ketiga-tiga tempat ini mempunyai cara berbeza dalam menangani email yang sampai kepada mereka.
OS: Centos
Lokasi Server: Bangunan/Infra kpdnkk
Relayhost: mail.isp.mailgov (bukan kpdnkk), ataupun guna IP mail server. Pilih salah satu.

Install Sendmail

pastikan sudah ada sendmail atau belum

 #service sendmail status  

Jika tiada, install sendmail.
 #yum install sendmail sendmail-cf  

Cari lokasi fail sendmail.mc, mungkin dalam folder /etc/mail/
 #updatedb  
 #locate sendmail.mc  

Edit fail sendmail.mc
 #vi sendmail.mc  

Terdapat 2 bahagian perlu diubah. Smart_host dan masquerade_as dnl define(`SMART_HOST', `') dnl MASQUERADE_AS(`mykiragst.kpdnkk.gov.my')dnl edit menjadi
 define(`SMART_HOST', `mail.isp.mailgov')  
 MASQUERADE_AS(`mykiragst.kpdnkk.gov.my')dnl  

di mana dnl sama seperti comment. Buang komen dan masukkan value. Kemudian, running make. Ia akan cipta file sendmail.cf.
 #make  
 atau  
 #/etc/mail/make  

sendmail.cf ini adalah file configuration untuk email. Tidak boleh diedit secara terus. Perlu melalui sendmail.mc dan compile. Check fail sendmail.cf, adakah smart_host point ke mail relay server? Jika ya, restart service sendmail
 #service sendmail restart  

Cuba hantar e-mel menggunakan command line.
 #mail firdaus@gmail.com<ENTER>  
 Subject: Test Sendmail<ENTER>  
 Ini adalah email testing <ENTER>  
 .<ENTER>  
 <ENTER>  

Jika tidak mahu guna titik dan ENTER, boleh guna Ctrl+D untuk complete and send. Pastikan email telah dihantar ke gmail. Kalau tak dapat emel, mintak kpdnkk allowkan ip apps server (OS Centos ini) di mail relay server.

3 E-mail berlaian host
Email dihantar kepada 3 tempat berlainan, contoh: firdaus@gmail.com, firdaus@mimos.my, pegawai@kpdnkk.gov.my

Keputusan: Gmail berjaya, mimos dan kpdnkk tidak berjaya.

Lihat pada email log file.
 #tail -f /var/log/maillog  
1:  Mar 18 17:24:44 mimos-app postfix/smtp[1493]: B038441B38: to=<pegawai@kpdnkk.gov.my>, relay=none, delay=55482, delays=55482/0.01/0.04/0, dsn=4.4.1, status=deferred (connect to kpdnkk.gov.my[10.23.150.16]:25: Connection refused)  
2:  Mar 18 17:25:31 mimos-app postfix/smtp[1492]: E570442076: to=<firdaus@mimos.my>, relay=dexter.mimos.my[202.45.138.110]:25, delay=1529, delays=1482/0.02/47/0.12, dsn=4.1.8, status=deferred (host doctors.mimos.my[202.45.138.110] said: 450 4.1.8 <root@mimos-app.localdomain>: Sender address rejected: MX or A record not found (in reply to RCPT TO command))  
3:  Mar 18 17:22:15 mimos-app postfix/smtp[1324]: 5FAE4420B7: to=<firdaus@gmail.com>, relay=gmail-smtp-in.l.google.com[74.125.130.26]:25, delay=2.1, delays=0.06/0.01/0.73/1.3, dsn=2.0.0, status=sent (250 2.0.0 OK 1429348876 my10si2599339pdb.33 - gsmtp)  
gmail status=sent.
kpdnkk status=deferred. Connection refuse.
mimos status= deferred. Sender address rejected.

Mungkin gmail terima sahaja email dari root@mimos-app.localdomain. Manakala mimos akan pastikan domain tersebut dikenalpasti. Jika tidak, e-mail itu akan ditolak. MIMOS mengandaikan ini email spam.

kpdnkk pula tidak berjaya dijumpai, lalu connection refuse. Mungkin isu unqualified domain.

Mungkin hostname/nama server ini @mimos-app.localdomain tidak dikenali diinternet, perlu tukar kepada nama yang valid.

Cuba lihat apa hostname server ini
 #hostname  
 atau  
 #hostname -f  

Untuk tukar hostname sementara waktu, jalankan arahan ini.
hostname NEWNAME
 #hostname mykiragst.kpdnkk.gov.my  

Untuk tukar secara kekal, edit /etc/hosts. Selepas tukar, perlu restart OS.

Contoh: 127.0.0.1 domain.com localhost.localdomain
x.x.x.x domain.com
Di mana x.x.x.x adalah IP

1:  --------------/etc/hosts---------------  
2:  127.0.0.1     mykiragst.kpdnkk.gov.my localhost.localdomain localhost  
3:  10.23.155.135     mykiragst.kpdnkk.gov.my mykiragst  

Apabila send e-mail semula, MIMOS sudah berjaya menerima email dari server ini. Tetapi kpdnkk masih gagal dengan error yang sama. Ini kerana pegawai@kpdnkk.gov.my diconnect relayhost. Jadi, bila sendmail, dia cuba connect to kpdnkk.gov.my[10.23.150.16]:25: Connection refused.

Sepatutnya dia connect ke mail.isp.mailgov. Pada status, to=, relay=none. Maksudnya relay masih tidak disetkan dengan betul. 

Memandangkan dari error menunjukkan postfix kata relay=none, ini menunjukkan setting postfix yang perlu diperbetulkan. 

 # vi /etc/postfix/main.cf  

myhostname = localhost
Tukar kepada:
1:  myhostname = mykiragst.kpdnkk.gov.my  
2:  inet_interfaces = all  
3:  relayhost = mail.isp.mailgov  

Kemudian, restart postfix
  # /etc/init.d/postfix restart  

 Hantar semula e-mail ke pegawai@kpdnkk.gov.my, dan ianya berjaya. Jadi, bila dah disetkan relayhost = mail.isp.mailgov di /etc/postfix/main.cf, dan restart postfix, semua email berjaya dihantar.  
TAMBAHAN

Untuk tengok email que list yang belum dihantar
 # postqueue -p  

flush email2 atau re-send semua e-mail yang deferred (sangkut) sebelum ini.
 # postqueue -f  

 Delete semua email yang tersangkut.
 # postsuper -d ALL  

Delete semua email yang berstatus deferred.
 # postsuper -d ALL deferred  

Untuk lihat apa port yang buka di kpdnkk sebab connection ke port 25 refused.
 host -a kpdnkk.gov.my  
 atau  
 dig kpdnkk.gov.my MX  

Sepatutnya dig ke mail.isp.mailgov, bukan kpdnkk. Walaupun hantar email ke kpdnkk, tetapi dia akan check port 25 di relayhost.

Valid Input Latitude dan Longitude

Wednesday, February 04, 2015

Jika dua-dua nilai ada dalam satu variable ($duakordinat).

preg_match('/^[-]?(([0-8]?[0-9])\.(\d+))|(90(\.0+)?);[-]?((((1[0-7][0-9])|([0-9]?[0-9]))\.(\d+))|180(\.0+)?)$/', $duakordinat);
Andaikan y=longitude dan x=latitude.
$y=4.924155
$x=102.685943
Nak check valid atau tidak, guna regex.

Regex untuk latitude
/^[-]?(([0-8]?[0-9])\.(\d+))|(90(\.0+)?)$/
Regex untuk longitude
/^[-]?((((1[0-7][0-9])|([0-9]?[0-9]))\.(\d+))|180(\.0+)?)$/
Contoh, nak check untuk longitude berdasarkan value dari get.
if(isset($_GET['y']) && preg_match('/^[-]?(([0-8]?[0-9])\.(\d+))|(90(\.0+)?)$/', $_GET['y'])){
 echo "y is coordinate
";
} else {
 echo "masukkan value yang betul";
}
Value datang dari sini.
index.php?x=102.685943&y=4.924155
Buat checking seperti ini.

< ? php
$regexx = '/^[-]?((((1[0-7][0-9])|([0-9]?[0-9]))\.(\d+))|180(\.0+)?)$/';
$regexy = '/^[-]?(([0-8]?[0-9])\.(\d+))|(90(\.0+)?)$/';

if(isset($_GET['x'],$_GET['y']) && preg_match($regexx, $_GET['x']) && preg_match($regexy, $_GET['y'])){
 echo "Kordinate yang betul br";
 echo "x=" . $_GET['x'] . " dan y=" . $_GET['y'] ."br";
} else {
 echo "masukkan value yang betul";
}
? >

Boleh fahamkan regex di atas dari sini https://regex101.com/r/bV5fA1/1

Manipulasi Data Pada Blok Array Yang Terpilih

Sunday, October 12, 2014

Kita ada beberapa blok data di dalam satu array, dan hanya beberapa blok terpilih sahaja yang kita mahu manipulasi.

Contoh, katakan di bawah ini ada 10 array yang menyimpan data pekerja. Data yang disimpan adalah, IC, Nama, Alamat, Notelefon, Umur, Bandar, Poskod, Negeri, Jawatan, dan kenderaan.

Terdapat dua (2) data yang hendak dimanipulasi/encrypt iaitu Nama, dan Notelefon.

array semuafield = {IC, Nama, Alamat, Notelefon, Umur, Bandar, Poskod, Negeri, Jawatan, kenderaan}
array selectfield = {Nama, Notelefon}

Contoh data:

 IC | Nama | Alamat | Notelefon | Umur | Bandar | Poskod | Negeri | Jawatan | kenderaan  
 9801 | Faaris | Taman PP | 123 | 27 | Puchong | 56000 | Selangor | CEO | Kereta  
 0102 | Saajidah | Taman PP | 456 | 24 | Puchong | 56000 | Selangor | COO | Kereta  

Nilai g = 10; //jumlah array untuk 'semuafield'
Nilai a = 2; //jumlah array untuk 'selectedfield'

* Sekadar nota (sila abaikan): Data ini diambil dari database postgres, dijalankan menggunakan C++. Data yang terhasil dan yang telah dimanipulasi, akan disimpan ke dalam file data.txt dalam bentuk csv format.

Di bawah adalah contoh source code asal.

 ofstream myfile ("data.txt", std::ios_base::app);  
 if (myfile.is_open())  
 {  
   d = 0;  
   result Rp( Z.exec( sqlp ));  
   for (result::const_iterator c = Rp.begin(); c !=Rp.end(); ++c, d++) {  
    int count;  
    for (int k=0; k < g; k++)  
    {  
     count=0;  
     for (int m=0; m < a; m++)  
     {  
       if (selectfield[m] == semuafield[k])  
        {  
         myfile << mimos_init(&chipper_mimos, c[semuafield[k]], cipher_id, key, 16);  
        } else {  
        myfile << c[semuafield[k]].as<string>();  
       }  
      }  
     if(k < (g-1))  
      {  
       myfile << ", ";  
      }  
    }  
    myfile << "\n";  
   }  
  myfile.close();  
  }  
  else cout << "Unable to open file";  


* Sekadar nota (sila abaikan):
if(k < (g-1)) { myfile << ", "; } dan "\n" untuk memenuhi format CSV file. Tanda koma (,) memisahkan antara blok data dan tanda \n untuk membina newline pada baris data baru.

Secara logik mudah, code ini tiada masalah kerana pada gelung pertama, for (k < g), kita sudah keluarkan semua data satu persatu. Kemudian, di dalamnya kita buat checking untuk 'selectedfield' pula. Lihat pada gelung for (m < a) yang berada di dalam gelung yang awal. Di dalam gelung (m < a) ini, kita akan buat checking, jika terjumpa data di dalam blok 'selectedfield', kita akan mula encryptkan data tersebut sebelum dimasukkan ke dalam file. Jika tidak, data akan dimasukkan terus ke dalam file tanpa apa-apa manipulasi.

    for (int k=0; k < g; k++)  
    {  
     count=0;  
     for (int m=0; m < a; m++)  
     {                        
       if (selectfield[m] == semuafield[k])  
        {  
         myfile << mimos_init(&chipper_mimos, c[semuafield[k]], cipher_id, key, 16);  
        } else {  
        myfile << c[semuafield[k]].as<string>();  
       }  
      }  
     if(k < (g-1))  
      {  
       myfile << ", ";  
      }  
    }  
    myfile << "\n";  

Tetapi, hasil yang kita dapat tidak menepati syarat. Datanya bertindih dan seolah-oleh encryption berjalan secara tidak konsisten

 9801, uYnudWRXUlhVbGhWYkdoVw==Faaris, Taman PP, 123+4RSU1UxVXhWWGhXV0doWA==, 27, Puchong, 56000, Selangor, CEO, Kereta  
 0102, +4RSU1UxVXhWWGhXV0doWA==Saajidah, Taman PP, 456+4RSU1UxVXhWWGhXV0doWA==, 24, Puchong, 56000, Selangor, COO, Kereta  


Jika diperhatikan, pada nilai yang dapat, ada data berulang. Contoh:

uYnudWRXUlhVbGhWYkdoVw==Faaris

uYnudWRXUlhVbGhWYkdoVw== adalah satu nilai. Faaris adalah satu nilai yang lain. Tetapi keduanya bercantum menjadi satu.

Ini kerana, nilai a=2, dan gelung pada a akan berjalan sebanyak 2 kali. Semakan kali pertama, ia memberi nilai uYnudWRXUlhVbGhWYkdoVw==, dan semakan kali kedua, diberi nilai Faaris.

Ini berlaku kerana selepas checking berlaku dan berjumpa dengan apa yang hendak di cari, gelung berjalan sekali lagi seperti biasa. Bagi mengatasi masalah ini, setiap kali gelung membuat semakan, gunakan fungsi break. Lihat kod di bawah (dengan beberapa perubahan berbanding kod di atas tadi.)

 if (myfile.is_open())  
 {  
   d = 0;  
   result Rp( Z.exec( sqlp ));  
   for (result::const_iterator c = Rp.begin(); c !=Rp.end(); ++c, d++) {  
    int count;  
    for (int k=0; k < g; k++)  
    {  
     count=0;  
     for (int m=0; m < a; m++)  
     {  
      if (c[semuafield[k]].size()==0)  
      {  
       myfile << "NULL";  
       break;  
      }  
       if (selectfield[m] == semuafield[k])  
        {  
         myfile << mimos_init(&chipper_mimos, c[semuafield[k]], cipher_id, key, 16);  
         break;  
        } else {  
        count++;  
        //myfile << c[semuafield[k]].as();  
        //break;  
       }  
        if (count == a)  
        myfile << c[semuafield[k]].as();  
      }  
     if(k < (g-1))  
      {  
       myfile << ", ";  
      }  
    }  
    myfile << "\n";  
   }  
  myfile.close();  
  }  
  else cout << "Unable to open file";  

PHP Pagination

Tuesday, May 06, 2014

Bagi meringkaskan paparan pagination. Sambungan dari post sebelum ini.

<table class="table table-hover table-condensed">
 <thead>
 <tr>
  <th>title</th>
  <th>title</th>
  <th>title</th>
 </tr>
 </thead>
 <tbody>
<?php
$limit_rekod=200; //200 rekod akan dipaparkan dalam satu page
$num_range = 3; //jumlah butang page bersebelahan dengan current button di kiri dan kanan. Jika current butang = 6. Kiri papar 3,4 dan 5. Kanan pula papar 7,8 dan 9. Selebihnya tidak dipaparkan. 
$num_limit = $num_range + 4;
$paging_url = "viewdata.php";
if (isset($_GET["page"])) { $page  = $_GET["page"]; } else { $page=1; }; 
$start_from = ($page-1) * $limit_rekod; 

$sql = "SELECT .... 
 LIMIT $start_from, $limit_rekod";
$result = mysql_query($sql,$con);
while($row = mysql_fetch_array($result))
{
?> 
 <tr>
  <td><?php echo $row['xxx']; ?></td>
  <td><?php echo $row['xxx']; ?></td>
  <td><?php echo $row['xxx']; ?></td>
 </tr>
<?php 
}
?>
 </tbody>
</table>

<!-- mula untuk pagination -->
<?php  
$sqlpg = "SELECT ...."; //select tanpa limit  
$rs_result = mysql_query($sqlpg,$con);
$total_records = mysql_num_rows($rs_result); 
$total_pages = ceil($total_records / $limit_rekod); 
?>
<ul class="pagination mtm mbm">
 <li class="<?php if($page == 1) echo "disabled"; ?>"><a href="<?php echo $paging_url; ?>?page=1">«</a></li>
<?php 
if($total_pages < ($num_range))
{
 for ($i=1; $i<=$total_pages; $i++) { 
?>
 <li class="<?php if($page == $i) echo "active"; ?>"><a href="<?php echo $paging_url; ?>?page=<?php echo $i; ?>"><?php echo $i; ?></a></li>
<?php 
 };
} elseif($total_pages > $num_limit) {
 if(($page - $num_range) > 1) {
?>
 <li class=""><a href="<?php echo $paging_url; ?>?page=<?php echo ($page - 1); ?>">&lt;</a></li>
 <li class="disabled"><a href="">...</a></li>
<?php 
 }
 
 if(($page + $num_range) < $num_limit) {
  for ($i=1; $i<=($page+$num_limit); $i++) {
?>
 <li class="<?php if($page == $i) echo "active"; ?>"><a href="<?php echo $paging_url; ?>?page=<?php echo $i; ?>"><?php echo $i; ?></a></li>
<?php    
  };
 }elseif(($page + $num_range) > $total_pages) {
  for ($i=$page - $num_range; $i<=$total_pages; $i++) {
?>
 <li class="<?php if($page == $i) echo "active"; ?>"><a href="<?php echo $paging_url; ?>?page=<?php echo $i; ?>"><?php echo $i; ?></a></li>
<?php    
  };
 }else {
  for ($i=$page - $num_range; $i<=($page + $num_range); $i++) { 
?>
 <li class="<?php if($page == $i) echo "active"; ?>"><a href="<?php echo $paging_url; ?>?page=<?php echo $i; ?>"><?php echo $i; ?></a></li>
<?php 
  };
 }
 if(($page + $num_range) < $total_pages){
?>
 <li class="disabled"><a href="">...</a></li>
 <li class=""><a href="<?php echo $paging_url; ?>?page=<?php echo ($page + 1); ?>">&gt;</a></li>
<?php 
 }
}
?>
 <li class="<?php if($page == $total_pages) echo "disabled"; ?>"><a href="<?php echo $paging_url; ?>?page=<?php echo $total_pages; ?>">»</a></li>
</ul>

Paparan yang terhasil seperti di bawah.

Jadi, paparan tidak jadi terlalu panjang. Jika ada 1 juta data pun, tidak dipaparkan sehingga 5 ribu butang. Hanya beberapa butang sahaja.

PHP Pagination Basic

Tuesday, March 04, 2014

Rujukan ringkas untuk membuat paging di PHP.

<table class="table table-hover table-condensed">
 <thead>
 <tr>
  <th>title</th>
  <th>title</th>
  <th>title</th>
 </tr>
 </thead>
 <tbody>
<?php
$limitrekod=200; // 200 data akan dipaparkan dalam satu page.
if (isset($_GET["page"])) { $page  = $_GET["page"]; } else { $page=1; }; 
$start_from = ($page-1) * $limitrekod; 

$sql = "SELECT .... 
 LIMIT $start_from, $limitrekod";
$result = mysql_query($sql,$con);
while($row = mysql_fetch_array($result))
{
?> 
 <tr>
  <td><?php echo $row['xxx']; ?></td>
  <td><?php echo $row['xxx']; ?></td>
  <td><?php echo $row['xxx']; ?></td>
 </tr>
<?php 
$runno++;
}
?>
 </tbody>
</table>

<!-- mula untuk pagination -->
<?php  
$sqlpg = "SELECT ...."; //select tanpa limit  
$rs_result = mysql_query($sqlpg,$con);
$total_records = mysql_num_rows($rs_result); 
$total_pages = ceil($total_records / $limitrekod); 
?>
<ul class="pagination mtm mbm">
 <li class="<?php if($page == 1) echo "disabled"; ?>"><a href="viewdata.php?page=1">«</a></li>
<?php 
for ($i=1; $i<=$total_pages; $i++) { 
?>
 <li class="<?php if($page == $i) echo "active"; ?>"><a href="viewdata.php?page=<?php echo $i; ?>"><?php echo $i; ?></a></li>
<?php 
};
?>
 <li class="<?php if($page == $total_pages) echo "disabled"; ?>"><a href="viewdata.php?page=<?php echo $total_pages; ?>">»</a></li>
</ul>

Hasilnya akan dapat seperti di bawah

Jika datanya ada sejuta, maka akan terpaparlah butang page sebanyak (1000000/200) = 5 ribu butang.

Bagi data yang tidak banyak, sesuailah code di atas digunakan. Jika data yang terlalu banyak, perlu diringkaskan cara paparan paging tersebut.

File System PHP

Tuesday, January 28, 2014

Kegunaan fungsi file system di PHP

Nama FungsiKeterangan
basenameMenghasilkan nama file dari satu path
chmodMengubah mode akses file
chownMengubah pemilik file
copyMeng-copy file
dirnameMenghasilkan nama direktori dari suatu path file
disk_free_spaceMenampilkan baki space disk pada satu direktori
disk_total_spaceMenghasilkan jumlah size direktori
fcloseMenutup file yang dibuka
fgetcMengambil karakter-karakter dalam satu file teks
fgetsMengambil baris-baris dari file
file_existsPastikan satu file atau direktori wujud atau tidak
file_get_contentsMembaca isi file keseluruhan
file_put_contentsMenulis teks ke file
fileMembaca isi file ke dalam array
fileatimeMendapatkan waktu akses terakhir suatu file
filesizeMendapatkan ukuran file
filetypeMendapatkan tipe file
fopenMembuka file atau URL
is_dirPastikan satu filename itu adakah satu direktori
is_executablePastikan apakah filename boleh di execute
is_filePastikan apakah filename itu adakah satu file
is_readablePastikan filename boleh dibaca
is_writablePastikan filename boleh ditambah kemaskini kontennya
mkdirMembuat direktori
move_uploaded_fileMemindahkan file yang diupload ke lokasi baru
renameRename file atau direktori
rmdirPadam direktori
unlinkPadam file

basename

Fungsinya : Menghasilkan nama file dari suatu path
Sintaks php :
basename ( string $path [, string $suffix ] )
Parameter :
$path, adalah alamat file dengan lokasi direktorinya, contoh : /var/www/gambar/fileku.jpg
$suffix, akan menghilangkan akhirannya sesuai string $suffix

Contoh penggunaan: 
$path = "/home/httpd/html/index.php";
$file = basename($path);
echo $file;                         //Hasilnya index.php

$file = basename($path, ".php");
echo $file;                         //Hasilnya index
?>

chmod

Fungsinya : Mengubah mode akses file, untuk linux, unix
Sintaks php :

chmod ( string $filename , int $mode )
Contoh penggunaan :
// Read dan write hanya untuk pemilik
chmod("/direktori/filesaya", 0600);
// Pemilik boleh buat apa sahaja, read dan execute untuk others
chmod("/direktori/filesaya", 0755); 
?>

chown

Fungsinya : Mengubah pemilik file
Sintaks php :
chown ( string $filename , mixed $user )
Contoh penggunaan:
$file_name= "foo.php";
$path = "/home/sites/php.net/public_html/sandbox" . $file_name ;
$user_name = "root";
// Set pemilik file
chown($path, $user_name);
?>

copy

Fungsinya : Mengcopy file
Sintaks php :
copy ( string $source , string $dest [, resource $context ] )
Parameter :
$source , adalah file yang akan dicopy
$dest, adalah file tujuan
Contoh penggunaan :
$file = 'upload.php';
$newfile = 'uploadcopy.php';
if (!copy($file, $newfile)) {
    echo "gagal copy file $file...\n";
}else{
    echo "File $file berhasil di copy";
}
?>

dirname

Fungsinya : Menghasilkan nama direktori dari suatu path file
Sintaks php :
dirname ( string $path )
Contoh penggunaan :
$path = "/www/gambar/pic.jpg";
$file = dirname($path);
echo $file;
//Hasilnya /www/gambar
?>

disk_free_space

Fungsinya : Menghasilkan sisa space disk suatu direktori (dalam bytes)
Sintaks php :
disk_free_space ( string $directory )
Contoh penggunaan :
//linux, unix
$df = disk_free_space("/"); 
//Windows:
echo disk_free_space("C:");
echo disk_free_space("D:");
?>

disk_total_space

Fungsinya : Menghasilkan total size direktori (dalam bytes)
Sintaks php :
disk_total_space ( string $directory )
Contoh penggunaan :
//linux , unix
$df = disk_total_space("/");

//Windows:
echo disk_total_space("C:");
echo disk_total_space("D:");
?>

fclose

Fungsinya : Menutup file yang dibuka
Sintaks php :
fclose ( resource $handle )
Contoh penggunaan :
$file = fopen('somefile.txt', 'r');
fclose($file);
?>

fgetc

Fungsinya : Mengambil karakter-karakter suatu file teks
Sintaks php :
fgetc ( resource $handle )
Contoh penggunaan :
Misal anda punya filesaya.txt, yang isinya : 
namaorang
$fp = fopen('filesaya.txt', 'r');
if (!$fp) {
    echo 'filesaya.txt tidak ada';
}
while (false !== ($char = fgetc($fp))) {
    echo "$char";
}
?>
Hasilnya : n a m a o r a n g

fgets

Fungsinya : Mengambil baris-baris dari file
Sintaks php :
fgets ( resource $handle [, int $length ] )
Parameter :
$handle, adalah file yang akan diambil barisnya
$length, adalah panjang/ukuran file, isi aja kira kira yang melebihi panjang file
Contoh penggunaan :
$handle = @fopen("filesaya.txt", "r");
if ($handle) {
    while (!feof($handle)) {
        $buffer = fgets($handle, 1000000);
        echo $buffer;
    }
    fclose($handle);
}
?>

file_exists

Fungsinya : Cek apakah file atau direktori tersebut ada
Sintaks php :
file_exists ( string $filename )
Contoh penggunaan :
$filename = 'filesaya.txt'; 
if (file_exists($filename)) {
    echo "File $filename ada";
} else {
    echo "File $filename tidak ada";
}
?>

file_get_contents

Fungsinya : Membaca isi file/ web keseluruhan menjadi string
Sintaks php :
file_get_contents ( string $filename [, int $flags= 0 [, resource $context [, int $offset= -1 
[, int $maxlen= -1 ]]]] )
Parameter :
$filename, file atau web yang akan dibaca isinya
Contoh penggunaan :
$homepage = file_get_contents('http://ayus80.blogspot.com/');
echo $homepage;
?>

file_put_contents

Fungsinya : Menulis teks ke file
Sintaks php :
file_put_contents ( string $filename , mixed $data [, int $flags= 0 [, resource $context ]] )
$filename, file yang akan ditulis
$data, data yang akan ditulis ke file, boleh string atau array
$flags, option, FILE_APPEND (jika file sudah ada, teks akan ditambahkan)
Contoh penggunaan :
$file = 'data.txt';
$nama = 'nama orang';
file_put_contents($file, $nama);
?>
Contoh di atas akan membuat file data.txt dan menuliskan 'nama orang' di dalam data.txt

file

Fungsinya : Membaca isi file perbatis, dimasukkan ke dalam array
Sintaks php :
file ( string $filename [, int $flags= 0 [, resource $context ]] )
Parameter :
$filenama, file yang akan dibaca isinya
$flags, option :
  • FILE_IGNORE_NEW_LINES  : Jangan tambahkan baris baru di akhir elemen array
  • FILE_SKIP_EMPTY_LINES  : Abaikan baris yang kosong
Contoh penggunaan :
$lines = file('filesaya.txt');
print_r($lines);
?>

fileatime

Fungsinya : Mendapatkan waktu akses terakhir suatu file
Sintaks php :
fileatime ( string $filename )
Contoh penggunaan :
$filename = 'filesaya.txt';
if (file_exists($filename)) {
    echo "$filename terakhir kali diakses pada: ";
 echo date("F d Y H:i:s.", fileatime($filename));
}
//filesaya.txt terakhir kali diakses pada: January 28 2014 10:02:12
?>

filesize

Fungsinya : Mendapatkan ukuran file
Sintaks php :
filesize ( string $filename )
Contoh penggunaan:
$filename = 'filesaya.txt';
echo $filename . ': ' . filesize($filename) . ' bytes';
?>

filetype

Fungsinya : Mendapatkan tipe file
Sintaks php :
filetype ( string $filename )
Contoh penggunaan :
echo filetype('filesaya.txt');  // file
echo filetype('/var/');         // dir
?>

fopen

Fungsinya : Membuka file atau URL
Sintaks php :
fopen ( string $filename , string $mode [, bool $use_include_path= false [, resource $context ]] )
$filename, namafile atau URL
$mode :
mode
Description
'r'Dibuka hanya untuk untuk dibaca; pointer diletakkan di awal file
'r+'Dibuka untuk dobaca dan ditulis; pointer diletakkan di awal file
'w'Dibuka hanya untuk ditulis; pointer diletakkan diawal file, jika file tidak ada, akan dibuat automatik
'w+'Dibuka untuk dibaca dan ditulis; pointer diletakkan diawal file, jika file tidak ada, akan dibuat automatik
'a'Dibuka hanya untuk ditulis; pointer diletakkan di akhir file, jika file belum ada, akan dibuat automatik.
'a+'Dibuka hanya untuk dibaca dan ditulis; pointer diletakkan di akhir file, jika file belum ada, akan dibuat automatik.
Contoh penggunaan :
$handle = fopen("/home/pentaho/file.txt", "r+");
$handle = fopen("http://www.example.com/", "r");
$handle = fopen("ftp://user:password@example.com/somefile.txt", "w");
?>

is_dir

Fungsinya: Cek apakah filename adalah sebuah directori
Sintaks php :
is_dir ( string $filename )
Contoh penggunaan :
if(is_dir('filesaya.txt')){
    echo "Ini adalah direktori";
}else{
    echo "Ini adalah file";
}
?>

is_executable

Fungsinya: Pastikan apakah filename boleh di execute
Sintaks php :
is_executable ( string $filename )
Contoh penggunaan :
$file = 'filesaya.txt';

if (is_executable($file)) {
    echo $file.' boleh diexecute';
} else {
    echo $file.' tidak boleh diexecute';
}
?>

is_file

Fungsinya: Cek apakah filename adalah sebuah file
Sitaks php :
is_file ( string $filename )
Contoh penggunaan :
if(is_file('filesaya.txt')){
    echo "Ini adalah file";
}else{
    echo "Ini bukan file";
}
?>

is_readable

Fungsinya: Pastikan apakah filename boleh dibaca
Sintaks php :
is_readable ( string $filename )
Contoh penggunaan :
if(is_readable('filesaya.txt')){
    echo "file ini boleh dibaca";
}else{
    echo "file ini tidak boleh dibaca";
}
?>

is_writable

Fungsinya: Cek apakah filename boleh ditulis
Sintaks php :
is_writable ( string $filename )
Contoh penggunaan :
if(is_writable('filesaya.txt')){
    echo "file ini boleh ditulis";
}else{
    echo "file ini tidak boleh ditulis";
}
?>

mkdir

Fungsinya: Membuat direktori
Sintaks php:
mkdir ( string $pathname [, int $mode= 0777 [, bool $recursive= false [, resource $context ]]] )
Contoh penggunaan :
mkdir("gambar", 0700);
?>

move_uploaded_file

Fungsinya: Memindahkan file yang diupload ke lokasi baru
Sintaks php :
move_uploaded_file ( string $filename , string $destination )
Contoh penggunaan :
Upload multiple file
$uploads_dir = '/uploads';
foreach ($_FILES["pictures"]["error"] as $key => $error) {
    if ($error == UPLOAD_ERR_OK) {
        $tmp_name = $_FILES["pictures"]["tmp_name"][$key];
        $name = $_FILES["pictures"]["name"][$key];
        move_uploaded_file($tmp_name, "$uploads_dir/$name");
    }
}
?>

rename

Fungsinya: Rename file atau directori
Sintaks php :
rename ( string $oldname , string $newname [, resource $context ] )
Contoh penggunaan :
rename("/tmp/tmp_file.txt", "/home/user/login/docs/my_file.txt");
?>

rmdir

Fungsinya: Delete direktori
Sintaks php :
rmdir ( string $dirname [, resource $context ] )
Contoh penggunaan :
rmdir('examples');
?>

unlink

Fungsinya: Delete file 
Sintaks php :
unlink ( string $filename [, resource $context ] )
Contoh penggunaan :
unlink('test.html');
?>