Apakah mungkin untuk secara efektif mengembangkan aplikasi PHP pada Windows yang akan digunakan pada server yang menjalankan Linux?

19

Apakah boleh kode PHP pada Windows dan host nanti di server yang menjalankan Linux? Bisakah ada masalah dalam migrasi proyek semacam itu?

Saya akan berpikir bahwa sebenarnya tidak ada masalah, terutama karena saya seorang pemula dalam PHP dan saya tidak akan menggunakan salah satu fungsi lanjutan yang mungkin spesifik OS. Namun, saya ingin memastikan karena saya benar-benar tidak suka Linux sama sekali.

DotNetStudent
sumber
1
Solusi sederhana untuk masalah Anda adalah VM Linux dengan Samba berjalan pada host Windows.
treecoder
Ya, itu bisa dilakukan, tetapi beberapa hal harus Anda pertimbangkan. Periksa jawaban untuk info lebih lanjut. Salah satu hal yang harus dilakukan pengembang, karena sumber daya, bukan karena mereka menyukainya.
umlcat

Jawaban:

27

Beberapa petunjuk:

Kepekaan case sistem file

Jika file Anda disebut HelloWorld.php ini:

include "helloworld.php";

sah untuk Windows dan akan berfungsi. Tapi nama file Linux adalah case sensitif, Anda dapat memiliki file disebut HelloWorld.php, helloworld.php, hEllOwOrlD.phpdalam direktori yang sama. Jadi, Anda harus mengembangkan di Windows seolah-olah Anda sedang mengembangkan sistem file case sensitif: gunakan nama file yang benar, nama direktori, nama ekstensi - .phpjuga berbeda dari .PHP.

Direktori dan pemisah jalur

Di Windows kami katakan:

include 'classes\myClass.php';

Tetapi di Linux kita akan mengatakan:

include 'classes/myClass.php';

PHP cukup pintar untuk tidak peduli, kedua pemisah bekerja di kedua sistem. Tetapi Anda harus konsisten dan mengikuti slash (/) di mana-mana karena ini juga merupakan norma pada kebanyakan sistem. Ada konstanta standar yang bagus DIRECTORY_SEPARATORyang diterjemahkan menjadi yang benar, jika Anda ingin melangkah sejauh itu:

include "classes" . DIRECTORY_SEPARATOR . "myClass.php";

Hal yang sama berlaku untuk pemisah jalur, yang merupakan titik koma pada Windows, titik dua sebaliknya. Jadi agar aman Anda harus melakukan:

set_include_path(get_include_path() . PATH_SEPARATOR . $path);

ketika membutuhkan pemisah jalur. Meskipun kebanyakan orang berpikir bahwa karena PHP tidak keberatan dengan pemisah yang Anda gunakan tidak apa-apa, tetapi ada satu tangkapan penting: Pemisah akan menjadi sistem yang spesifik ketika Anda menanyakan direktori atau jalur ke sistem. Jadi misalkan Anda ingin meledakkan path include ke dalam bagian-bagiannya:

$includePath = get_include_path();

$pathParts = explode(";", $includePath) // Will only work on Windows
$pathParts = explode(":", $includePath) // Will work on other systems but not Windows
$pathParts = explode(PATH_SEPARATOR, $includePath) // Will work everywhere!!!

Pengkodean dan pembatas file

Anda harus mengatur IDE Anda untuk mengatur pengkodean file untuk semua skrip Anda ke UTF-8, bukan Cp *, dan pembatas baris file ke Unix ( "\n"bukan "\r\n"). Dalam kebanyakan kasus itu tidak terlalu penting tetapi Anda harus konsisten dan cara terbaik adalah cara Unix (yang berfungsi dengan baik pada Windows tetapi tidak sebaliknya).

yannis
sumber
1
Untuk string di mana Anda mungkin mengalami masalah baris baru, PHP juga menyertakan konstanta PHP_EOL yang menggunakan karakter baris baru yang benar untuk platform saat ini.
Jonathan Patt
5
Orang benar-benar menggunakan garis miring terbalik di jalur mereka di PHP / Windows? Bahkan jika saya belum menggunakan PHP di Linux, saya akan menghindari backslashes hanya karena mereka melarikan diri.
cao
2
Bukankah seharusnya "kelas \\ myClass.php"?
Luiscubal
@luiscubal Ya karena saya menggunakan tanda kutip ganda ... Terima kasih telah menemukannya, diedit menjadi tanda kutip tunggal.
yannis
3
Case Sensitivity dan File Encoding adalah dua yang selalu menyebabkan saya kesulitan antara Windows / Linux.
Rangoric
6

Anda tidak dapat menjalankan strftime()dengan %edi lingkungan Windows, seperti yang tercantum di halaman manual :

Tidak semua penentu konversi mungkin didukung oleh pustaka C Anda, dalam hal ini mereka tidak akan didukung oleh strftime PHP (). Selain itu, tidak semua platform mendukung cap waktu negatif, sehingga rentang tanggal Anda mungkin dibatasi tidak lebih awal dari zaman Unix. Ini berarti bahwa% e,% T,% R dan,% D (dan mungkin yang lain) - serta tanggal sebelum 1 Januari 1970 - tidak akan berfungsi pada Windows, beberapa distribusi Linux, dan beberapa sistem operasi lainnya. Untuk sistem Windows, tinjauan umum lengkap dari penentu konversi yang didukung dapat ditemukan di » MSDN .

ilhan
sumber
4

Tidak akan ada masalah dalam menjalankan kode. Jika Anda mengedit file yang disimpan di Windows di Linux, Anda mungkin memperhatikan bahwa karakter akhir baris mungkin berbeda tetapi tidak ada salahnya. Jika itu mengganggu Anda mengkonfigurasi windows IDE / editor Anda untuk menggunakan Unix end of line.

Pierre
sumber
3

Atur diri Anda dengan testbed Linux. Ini bisa berupa komputer Linux virtual yang berjalan di bawah Windows, bisa juga komputer dual-boot, bisa juga sistem teman. Kemudian, sesekali (mis. Senin pagi), port kode Anda ke sistem Linux dan mengujinya.

Jawaban lain menangani masalah utama yang akan Anda hadapi, tetapi ada banyak gotcha yang lebih kecil, seperti:

  • direktori temp berada di tempat yang berbeda
  • izin file dan direktori berbeda
  • fungsi system () berubah secara radikal
  • Nama pengguna yang dijalankan Apache sebagai perubahan
  • Hal-hal yang berfungsi pada Windows XP mungkin gagal pada Windows 8.

Ya, ada cara untuk secara hati-hati mengatasi semua perbedaan ini, tetapi apakah Anda berhati-hati dalam menggunakan solusi tersebut? Tentu saja tidak - Anda dikodekan dan dijalankan sehingga harus OK.

Jangan letakkan apapun di komputer host sebelum diuji pada sistem operasi yang sama.

Saya tidak punya pengalaman porting dari Windows ke Linux, tetapi saya punya pengalaman porting dari Linux ke Windows dan lebih banyak pengalaman porting dari Linux ke OS X. Itu bisa dilakukan, tetapi kuncinya adalah pengujian, pengujian, dan pengujian.

Andy Canfield
sumber
1

Meskipun saya cukup nyaman di baris perintah Linux dan dengan alat pengeditan Linux seperti vim, saya melakukan sebagian besar pengembangan PHP saya pada mesin windows.

Saya memiliki server virtual di internet (menjalankan saya sekitar $ 20 per bulan) yang saya gunakan sebagai server pengembangan, dan saya terhubung dengannya menggunakan FileZilla. FileZilla mengunduh file yang saya edit ke direktori temp dan melacak menyimpan dan ketika saya menyimpannya melemparkannya kembali ke server dev, dan saya mengujinya dari sana.

Agak rumit, tetapi memungkinkan saya untuk melakukan pengembangan cukup banyak di mana saja; menggunakan FileZilla dan editor sederhana di thumb drive saya bahkan dapat terhubung dari komputer lain dan membuat perubahan. Semua pengujian selalu di server Linux, jadi saya menangkap masalah yang mungkin saya sebabkan di luar kotak - lebih sedikit kejutan yang tidak menyenangkan ketika saya melemparkan kode ke server.

Anda dapat melakukan hal yang sama dengan akun hosting murah (walaupun tergantung pada jenis aplikasi yang Anda kembangkan, Anda mungkin mengalami masalah kinerja karena akun hosting murah biasanya kurang bertenaga) dan banyak aplikasi FTP lainnya juga memiliki edit-dan- fungsionalitas unggah.

cori
sumber
1

Ya, itu bisa dilakukan, tetapi beberapa hal harus Anda pertimbangkan. Periksa jawaban untuk info lebih lanjut.

Itu salah satu dari hal-hal itu, kadang-kadang pengembang harus lakukan, karena sumber daya, bukan karena mereka menyukainya.

Anda mungkin memiliki server web lokal (apache, cherokee, bahkan M $), di PC Anda, dan server PHP diinstal. Dan PC Anda, mungkin tidak memiliki koneksi Internet, atau hanya dapat terhubung untuk waktu yang singkat.

Kemudian Anda dapat memperbarui situs web nyata, memperbarui file Anda ke server nyata, dengan alat ftp, dengan PC yang sama atau PC lain, yang terhubung ke internet.

umlcat
sumber
0

Seperti yang dikatakan kebanyakan orang, seharusnya tidak ada masalah. Yang mengatakan, VirtualBox membuatnya sangat, sangat mudah untuk berdiri mesin virtual linux yang Anda dapat menguji basis kode Anda untuk memastikan itu berfungsi di lingkungan produksi tanpa harus mengatakan lingkungan produksi berguna.

Wyatt Barnett
sumber