Belajar PHP dan MySQL dari NOL – Part VI (Olah File)
Kembali ke Sekolah
Ketika Anda pertama kali mulai membaca seri ini, saya berjanji bahwa Anda akan memiliki banyak hal yang menyenangkan. Jika Anda adalah tipe sinis, Anda mungkin merasa bahwa aku tidak menepati janjiku. Setelah semua, berapa banyak yang telah Anda benar-benar menyenangkan sejauh ini? Semua yang telah dilakukan adalah mempelajari banyak aturan teoritis, ditambahkan dan dikurangi nomor dari satu sama lain, belajar sepanjang primitif pengambilan keputusan dan pergi-putar dalam lingkaran pengulangan (loop). Hmmm, jika ini bukan tutorial PHP, maka akan jadi seperti taman kanak-kanak …
Aku mendengar Anda.
Dalam segmen saga kami yang berkelanjutan, aku akan mengajari Anda bagaimana melakukan sesuatu yang jelas bukan untuk anak-anak. Ini melibatkan semakin ke bawah dan kotor dengan file di disk anda: pertemuan mereka (kejutan!), Membaca isinya (menjerit) dan! (Kengerian kengerian) menulis data ke mereka!. Semua kegiatan menarik akan berlangsung di bawah naungan file manipulasi API PHP sangat keren, yang memungkinkan Anda untuk melihat dan mengubah atribut file, membaca dan isi daftar direktori, mengubah hak akses file, mengambil file isinya ke berbagai struktur data asli, dan mencari file berdasarkan pola tertentu.
Mari kita mulai!
Menangani Dengan Perawatan
Saya akan mulai dengan sesuatu sederhana: membuka file dan membaca isinya. Mari kita berasumsi bahwa di suatu tempat pada disk Anda, tersembunyi di /usr/local/stuff/that/should/be/elsewhere/recipes/, Anda memiliki file teks yang berisi resep untuk omelet Spanyol yang sempurna. Sekarang Anda ingin membaca isi file ini ke dalam script PHP.
Untuk melakukan hal ini, ada tiga langkah yang berbeda yang harus diikuti:
* Buka file tersebut dan menetapkan itu menangani file.
* Berinteraksi dengan file tersebut, melalui gagangnya, dan ekstrak isinya ke dalam variabel PHP.
* Tutup file.
Berikut adalah skrip PHP yang akan melakukan hal tersebut:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?php // set file untuk baca $file = '/usr/local/stuff/that/should/be/elsewhere/recipes/omelette.txt'; // buka file $fh = fopen($file, 'r') or die('Tidak bisa buka file!'); // baca isi konten file $data = fread($fh, filesize($file)) or die('Tidak bisa baca file!'); // tutup file fclose($fh); // tampilkan isi konten file echo $data; ?> |
Jalankan script ini melalui browser Web Anda, dan PHP harus mengembalikan isi file.
Sekarang mari saya jelaskan masing-masing dari tiga langkah di atas secara rinci:
Buka file tersebut dan menetapkan itu menangani file
PHP menangani kebutuhan file untuk membaca data dari file. Menangani file ini dapat dibuat dengan fopen () fungsi, yang menerima dua argumen: nama dan path ke file tersebut, dan string menunjukkan “modus” di mana file tersebut akan dibuka (‘r’ untuk membaca).
Tiga modus yang berbeda tersedia untuk digunakan dengan fopen () function. Berikut daftar:
‘r’ – membuka file dalam modus baca
‘w’ – membuka file dalam modus menulis, menghancurkan isi file yang ada
‘a’ – membuka file dalam modus menambahkan, melestarikan isi file yang ada
Berinteraksi dengan file melalui gagangnya dan ekstrak isinya ke dalam variabel PHP
Jika fungsi fopen() berhasil, ia mengembalikan file menangani, $fh, yang dapat digunakan untuk interaksi lebih lanjut dengan file tersebut. Menangani file ini digunakan oleh fungsi fread(), yang membaca file dan memasukkan isinya ke dalam variabel.
Argumen kedua fread () adalah jumlah byte untuk dibaca. Anda biasanya dapat memperoleh informasi ini melalui fungsi filesize(), yang – yang pasti akan menebaknya?! – Mengembalikan ukuran file dalam byte.
Tutup file
Langkah terakhir ini tidak sepenuhnya diperlukan, karena PHP secara otomatis menutup file setelah eksekusi script selesai, tapi menggunakan fclose() adalah kebiasaan baik untuk dikembangkan. Secara eksplisit menutup file dengan fclose() memiliki dua manfaat: ia mengikat berakhir longgar di script Anda, dan Anda memenangkan banyak karma yang baik dari komunitas PHP.
Anda mungkin tidak melihat die() fungsi sebelumnya, baik. Fungsi ini banyak digunakan sebagai mekanisme penanganan kesalahan-primitif. Dalam hal kesalahan fatal, seperti path file yang tidak valid atau hak akses file PHP menjadi seperti yang tidak bisa membacanya, die() berakhir dan secara opsional pengolahan script akan menampilkan pesan kesalahan pengguna-ditentukan menunjukkan mengapa bunuh diri.
Berbeda Pukulan
Sebuah metode alternatif untuk membaca data dari sebuah berkas adalah fungsi file() yang sangat keren, yang membaca berkas tersebut ke dalam array (ingat mereka) dengan satu baris kode?. Setiap elemen array kemudian berisi satu baris dari file tersebut. Untuk menampilkan isi file tersebut, cukup iterate selama dalam array foreach() loop dan mencetak setiap elemen.
Contoh berikut menunjukkan:
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php // set file untuk baca $file = '/usr/local/stuff/that/should/be/elsewhere/recipes/omelette.txt'; // baca file dan masukkan kedalam variabel array $data = file($file) or die('Tidak bisa baca file!'); // loop dari array dan tampilkan data tiap baris foreach ($data as $line) { echo $line; } ?> |
Dalam contoh ini, perintah file() membuka file tersebut, membacanya ke array dan menutup file – semua dalam satu, tunggal, gerakan elegan. Setiap elemen array saat ini sesuai dengan sebuah baris dari file tersebut. Sangat mudah untuk mencetak isi file sekarang – hanya meraih yang utama pengolahan array, yang foreach() loop.
Tidak ingin data dalam array? Coba fungsi file_get_contents(), baru dalam PHP 4.3.0 dan PHP 5.0, yang berbunyi seluruh file ke dalam string:
1 2 3 4 5 6 7 8 9 10 |
<?php // set file untuk baca $file = '/usr/local/stuff/that/should/be/elsewhere/recipes/omelette.txt' ; // baca file dan masukkan kedalam variabel utuh string $data = file_get_contents($file) or die('Tidak bisa baca file!'); // print contents echo $data; ?> |
Siapa aku bercanda? Saya selalu menggunakan fungsi satu-baris yang disebutkan di atas bukan urutan tiga baris fopen(), fread() dan fclose(). Kemalasan mengalahkan segalanya.
Ketika Kemalasan adalah sebuah Kebajikan
PHP juga menawarkan dua fungsi yang sangat berguna untuk mengimpor file ke dalam script PHP: fungsi include() dan require(). Fungsi ini dapat digunakan untuk menghisap mengunci file eksternal, saham dan barel menjadi script PHP, yang sangat berguna jika, misalnya, Anda memiliki aplikasi modular yang dipecah kodenya di file di lokasi yang terpisah.
Cara terbaik untuk memahami kegunaan ini include() dan require() fungsi ini dengan sebuah contoh. Asumsikan bahwa di situs Web Anda, Anda memiliki menu bar standar di bagian atas setiap halaman, dan pemberitahuan hak cipta standar di bagian bawah. Daripada menyalin dan menyisipkan header dan footer kode pada masing-masing halaman, “PHP guru” cukup buat file terpisah untuk header dan footer, dan impor mereka di bagian atas dan bawah masing-masing script. Hal ini juga membuat perubahan ke desain situs lebih mudah untuk menerapkan: bukan mengedit file secara manual trilyun, Anda cukup mengedit dua, dan perubahan tercermin di seluruh situs Anda secara instan.
Mari kita lihat contoh hidup nyata dalam tindakan ini. Buat header dalam satu file, yang disebut header.php:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<html> <head> <title><?php echo $page['title'];?></title> </head> <body> <!-- top menu bar --> <table width="90%" border="0" cellspacing="5" cellpadding="5"> <tr> <td><a href="#">Home</a></td> <td><a href="#">Site Map</a></td> <td><a href="#">Search</a></td> <td><a href="#">Help</a></td> </tr> </table> <!-- header ends --> |
Selanjutnya, menciptakan footer dengan pemberitahuan hak cipta dalam file kedua, footer.php:
1 2 3 4 5 |
<!-- footer begins --> <br /> <center>Your usage of this site is subject to its published <a href="tac.html">terms and conditions</a>. Data is copyright Big Company Inc, 1995-<?php echo date("Y", mktime()); ?></center> </body> </html> |
Akhirnya, membuat skrip untuk menampilkan konten utama situs Anda, dan include() header dan footer pada tempat yang tepat:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?php // create an array to set page-level variables $page = array(); $page['title'] = 'Product Catalog'; /* once the file is imported, the variables set above will become available to it */ // include the page header include('header.php'); ?> <!-- HTML content here --> <?php // include the page footer include('footer.php'); ?> |
Sekarang, ketika Anda menjalankan script di atas, PHP secara otomatis akan membaca di header dan footer file, menggabungkan mereka dengan konten HTML, dan menampilkan halaman lengkap untuk Anda. Sederhana, bukan?
Perhatikan bahwa Anda bahkan dapat menulis kode PHP dalam file yang diimpor. Saat file pertama kali dibaca, parser akan mencari , dan secara otomatis mengeksekusi kode di dalamnya. (Jika Anda akrab dengan JavaScript, Anda dapat menggunakan fitur ini untuk meniru fungsionalitas mirip dengan yang dari onLoad() event handler Halaman dalam JavaScript.)
PHP juga menawarkan fungsi require_once() dan include_once(), yang memastikan bahwa file yang telah dibaca tidak dibaca lagi. Hal ini dapat berguna jika Anda memiliki sebuah situasi di mana Anda ingin menghapus baca beberapa include file yang sama, baik untuk alasan kinerja atau untuk menghindari korupsi dari variabel ruang.
Sebuah catatan singkat tentang perbedaan antara fungsi include() dan require(): fungsi require() mengembalikan sebuah kesalahan fatal jika file bernama tidak dapat ditemukan dan pengolahan menghentikan skrip, sedangkan include() fungsi kembali peringatan tapi memungkinkan script pengolahan untuk melanjutkan.
Menulis data ke sebuah file
Setelah semua yang telah Anda baca, Anda mungkin menyadari bahwa membaca file tidak persis operasi otak. Jadi mari kita lanjutkan untuk sesuatu yang sedikit lebih sulit – menulis ke sebuah file.
Langkah-langkah yang terlibat dalam menulis data ke file hampir sama dengan mereka yang terlibat dalam membacanya: membuka file dan mendapatkan file menangani, menggunakan file pegangan untuk menulis data ke situ, dan menutup file. Ada dua perbedaan: pertama, Anda harus fopen() file dalam modus menulis (‘w’ untuk menulis), dan kedua, yang tadinya menggunakan fungsi fread() untuk membaca dari file pegangan, sekarang gunakan fungsi fwrite() untuk menulis itu. Perhatikan:
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php // set file untuk menulis $file = '/tmp/dump.txt'; // buka file $fh = fopen($file, 'w') or die('Tidak bisa buka file!'); // menulis di file fwrite($fh, "Lihat, Ibu, Saya nulis di file! ") or die('Tidak bisa menulis di file!'); // tutup file fclose($fh); ?> |
Ketika Anda menjalankan script ini, harus membuat file bernama dump.txt di /tmp, dan menulis baris teks untuk itu, dengan data kembali di akhir. Perhatikan bahwa tanda kutip ganda diperlukan untuk mengubah menjadi data kembali.
Fungsi fopen(), fwrite() dan fread() semua biner-aman, yang berarti Anda dapat menggunakannya di file biner tanpa perlu khawatir kerusakan pada isi file. Baca lebih lanjut tentang banyak masalah yang berkaitan dengan manipulasi file biner-aman pada platform yang berbeda di http://www.php.net/manual/en/function.fopen.php
Jika saya sudah dimanjakan Anda dengan menunjukkan Anda cara pintas fungsi satu-line untuk membaca file, biarkan aku lanjutkan Anda lebih lanjut dengan memperkenalkan Anda ke fungsi file_put_contents(), baru di PHP 5.0, yang mengambil seutas tali dan menulis ke file dalam satu baris kode.
1 2 3 4 5 6 7 8 |
<?php // set file untuk menulis $filename = '/tmp/dump.txt'; // menulis file file_put_contents($filename, "Lihat, Ibu, Saya nulis di file! ") or die('Tidak bisa menulis di file!'); ?> |
Ingatlah bahwa direktori di mana Anda mencoba untuk membuat file harus ada sebelum Anda dapat menulis untuk itu. Lupa langkah penting adalah penyebab umum dari kesalahan skrip.
Informasi adalah Kekuatan
PHP juga dilengkapi dengan sejumlah fungsi yang memungkinkan Anda untuk menguji status file – misalnya untuk mengetahui apakah ada, apakah itu kosong, apakah itu dapat dibaca atau ditulis, dan apakah itu suatu biner atau file teks. Dari jumlah tersebut, operator yang paling sering digunakan adalah file_exists () fungsi, yang digunakan untuk menguji keberadaan file tertentu.
Berikut ini adalah contoh yang meminta pengguna untuk memasukkan path ke file dalam bentuk web, dan kemudian kembali menampilkan pesan atau tidak file ada:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
<html> <head> </head> <body> <?php // apakah form telah di submit // tampilkan input box if (!isset($_POST['file'])) { ?> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> Enter file path <input type="text" name="file"> </form> <?php } // else process form input else { // periksa apakah file ada // tampilkan pesan if (file_exists($_POST['file'])) { echo 'File ada!'; } else { echo 'File tidak ada!'; } } ?> </body> </html> |
Ada lebih banyak fungsi seperti. Berikut adalah daftar singkat, diikuti dengan contoh yang dibangun di atas satu sebelumnya untuk memberikan informasi lebih lanjut tentang file yang ditentukan oleh pengguna.
* is_dir() – mengembalikan Boolean yang menunjukkan apakah jalan yang ditetapkan adalah sebuah direktori
* is_file() – mengembalikan Boolean yang menunjukkan apakah berkas yang ditentukan adalah file biasa
* is_link() – mengembalikan Boolean yang menunjukkan apakah berkas yang ditentukan adalah symbolic link
* is_executable() – mengembalikan Boolean yang menunjukkan apakah berkas yang ditentukan adalah executable
* is_readable() – mengembalikan Boolean yang menunjukkan apakah berkas yang ditentukan dapat dibaca
* is_writable() – mengembalikan Boolean yang menunjukkan apakah file yang diberikan tidak ditulis
* filesize() – mendapatkan ukuran file
* filemtime() – mendapatkan waktu modifikasi terakhir dari berkas
* filamtime() – mendapatkan waktu akses terakhir dari file
* fileowner() – mendapat pemilik file
* filegroup() – kelompok mendapat file
* fileperms() – mendapatkan hak akses file
* filetype() – mendapatkan jenis file
Script ini meminta nama file sebagai input dan menggunakan fungsi di atas untuk menampilkan kembali informasi tersebut.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
<html> <head> </head> <body> <?php /* if form has not yet been submitted, display input box */ if (!isset($_POST['file'])) { ?> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> Enter file path <input type="text" name="file"> </form> <?php } // else process form input else { echo 'File name: <b>'.$_POST['file'] .'</b><br />'; /* check if file exists and display appropriate message */ if (file_exists($_POST['file'])) { // print file size echo 'File size: '.filesize($_POST['file']).' bytes<br />'; // print file owner echo 'File owner: '.fileowner($_POST['file']).'<br />'; // print file group echo 'File group: '.filegroup($_POST['file']).'<br />'; // print file permissions echo 'File permissions: '.fileperms($_POST['file']).'<br />'; // print file type echo 'File type: '.filetype($_POST['file']).'<br />'; // print file last access time echo 'File last accessed on: '.date('Y-m-d', fileatime($_POST['file'])).'<br />'; // print file last modification time echo 'File last modified on: '.date('Y-m-d', filemtime($_POST['file'])).'<br />'; // is it a directory? if (is_dir($_POST['file'])) { echo 'File is a directory <br />'; } // is it a file? if (is_file($_POST['file'])) { echo 'File is a regular file <br />'; } // is it a link? if (is_link($_POST['file'])) { echo 'File is a symbolic link <br />'; } // is it executable? if (is_executable($_POST['file'])) { echo 'File is executable <br />'; } // is it readable? if (is_readable($_POST['file'])) { echo 'File is readable <br />'; } // is it writable? if (is_writable($_POST['file'])) { echo 'File is writable <br />'; } } else { echo 'File does not exist! <br />'; } } ?> </body> </html> |
Dan inilah yang outputnya mungkin terlihat seperti:
File name: /usr/local/apache/logs/error_log
File size: 53898 bytes
File owner: 0
File group: 0
File permissions: 33188
File type: file
File last accessed on: 2004-05-26
File last modified on: 2004-06-20
File is a regular file
File is readable
Memecahkan Telur
Jadi sekarang Anda tahu cara membaca file, menulis untuk itu, dan menguji statusnya. Mari kita lihat beberapa contoh yang dapat Anda lakukan dengan kekuatan baru-ditemukan.
Mari kita kembali ke resep omelet Spanyol saya. Mari kita mengira aku merasa murah hati, dan aku memutuskan bahwa aku ingin mendengar apa yang orang benar-benar berpikir tentang keterampilan kuliner saya. Sejak saya memiliki banyak resep yang saya ingin berbagi dengan orang, dan karena mereka semua sesuatu yang terlihat seperti ini:
SPANYOL dadar
Bahan:
– 1 bawang
– 1 tomat cincang
– 1 / 2 paprika hijau cincang
– 4 telur kocok
– Garam dan merica secukupnya
METODE:
1. Goreng bawang dalam panci
2. Tuangkan telur kocok dan goreng bawang lebih lembut
3. Tambahkan tomat, paprika hijau, garam dan merica secukupnya
4. Sajikan dengan roti panggang atau roti
Aku butuh cara cepat untuk mengkonversi mereka semua ke dalam HTML agar mereka terlihat rapi di situs Web saya. Kami sudah menetapkan bahwa aku malas, jadi fuggedaboutme menciptakan kembali resep dalam HTML. Sebaliknya, saya akan memiliki PHP melakukan angkat berat bagi saya:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<html> <head></head> <body> <?php // read recipe file into array $data = file('/usr/local/stuff/that/should/be/elsewhere/omelette.txt') or die('Could not read file!'); /* first line contains title: read it into variable */ $title = $data[0]; // remove first line from array array_shift($data); ?> <h2><?php echo $title; ?></h2> <?php /* iterate over content and print it */ foreach ($data as $line) { echo nl2br($line); } ?> </body> </html> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<html> <head> </head> <body> <h2> SPANYOL dadar</h2> Bahan: <br /> - 1 bawang cincang <br /> - 1 tomat cincang <br /> - 1 / 2 cincang <br /> lada hijau - 4 butir telur dikocok <br /> - Garam dan merica untuk rasa <br /> METODE: <br /> 1. Goreng bawang dalam panci <br /> 2. Tuangkan telur kocok dan goreng bawang selama lembut <br /> 3. Tambahkan tomat, paprika hijau, garam dan merica untuk rasa <br /> 4. Sajikan dengan roti panggang atau roti <br /> </body> </html> |
Jika keanggunan dan kesederhanaan kreatif resep omelet Spanyol saya telah kiri Anda berkata-kata, aku tidak heran – banyak orang merasa seperti itu. Sampai Anda mendapatkan suara Anda kembali: Ciao … dan pastikan Anda datang kembali melalui Bagian berikutnya, yang membahas tentang membuat fungsi sendiri dapat digunakan kembali.
Sumber: http://devzone.zend.com/node/view/id/636
Diterjemahkan oleh: http://translate.google.com dan disadur oleh jinbatsu (jwd)
Wah.. saya jadi agak bingung mas. Fungsi-fungsi file di PHP ternyata banyak ya.. tapi kapan kita sebaiknya make “fopen” ama “fread” dibandingkan “file_get_content()”, dan sebaliknya?
Atau terserah selera masing-masing aja?
@wildanr, biasanya fungsi fopen dan fread dipakai untuk mengoperasikan file local dalam server, sedangkan file_get_content() biasanya digunakan untuk remote server atau url website diluar server kita, misalkan kita ingin membaca konten isi website BCA.