เป็นไปได้หรือไม่ที่จะพัฒนาแอพพลิเคชั่น PHP บน Windows ที่จะติดตั้งบนเซิร์ฟเวอร์ที่ใช้ลีนุกซ์?


19

การใช้โค้ด PHP บน Windows และโฮสต์ในภายหลังบนเซิร์ฟเวอร์ที่ใช้ Linux หรือไม่ มีปัญหาใด ๆ ในการโยกย้ายของโครงการดังกล่าวหรือไม่?

ฉันคิดว่าคงไม่มีปัญหาใด ๆ โดยเฉพาะอย่างยิ่งตั้งแต่ฉันเป็นผู้เริ่มต้นใน PHP และฉันจะไม่ใช้ฟังก์ชั่นขั้นสูงใด ๆ ที่อาจเฉพาะกับระบบปฏิบัติการ อย่างไรก็ตามฉันต้องการตรวจสอบให้แน่ใจเพราะฉันไม่ชอบ Linux เลย


1
ทางออกที่ง่ายสำหรับปัญหาของคุณคือ Linux VM ที่มี Samba ทำงานอยู่บนโฮสต์ Windows
treecoder

ใช่มันสามารถทำได้ แต่หลายสิ่งที่คุณต้องพิจารณา ตรวจสอบคำตอบสำหรับข้อมูลเพิ่มเติม มันเป็นหนึ่งในสิ่งที่นักพัฒนาต้องทำเนื่องจากทรัพยากรไม่ใช่เพราะพวกเขาชอบมัน
umlcat

คำตอบ:


27

พอยน์เตอร์บางส่วน:

ความไวของระบบไฟล์

หากไฟล์ของคุณชื่อ HelloWorld.php สิ่งนี้:

include "helloworld.php";

ถูกต้องบน Windows และจะทำงาน แต่ชื่อไฟล์ลินุกซ์เป็นกรณีที่สำคัญคุณสามารถมีไฟล์ที่เรียกว่าHelloWorld.php, helloworld.php, hEllOwOrlD.phpในไดเรกทอรีเดียวกัน ดังนั้นคุณควรจะพัฒนาบน Windows เช่นถ้าคุณมีการพัฒนาในกรณีที่ระบบแฟ้มที่มีความสำคัญ: การใช้งานตรงชื่อไฟล์ที่ถูกต้องชื่อไดเรกทอรีชื่อนามสกุล - นอกจากนี้ยังแตกต่างจาก.php.PHP

ตัวคั่นไดเร็กทอรีและพา ธ

ใน Windows เราพูดว่า:

include 'classes\myClass.php';

แต่ใน Linux เราจะพูดว่า:

include 'classes/myClass.php';

PHP นั้นฉลาดพอที่จะไม่สนใจตัวคั่นทั้งสองทำงานในทั้งสองระบบ แต่คุณควรจะสอดคล้องกันและไปกับเครื่องหมายทับ (/) ทุกที่เพราะมันเป็นบรรทัดฐานในระบบส่วนใหญ่ มีค่าคง DIRECTORY_SEPARATORที่ที่กำหนดไว้ล่วงหน้าที่ดีซึ่งแปลเป็นค่าที่ถูกต้องหากคุณต้องการไปไกลขนาดนั้น:

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

เช่นเดียวกับตัวคั่นพา ธ ซึ่งเป็นเครื่องหมายอัฒภาคบน Windows ไม่เช่นนั้นโคลอน เพื่อความปลอดภัยคุณควรทำ:

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

เมื่อต้องการตัวแยกพา ธ แม้ว่าคนส่วนใหญ่คิดว่าเนื่องจาก PHP ไม่ได้คำนึงถึงตัวคั่นที่คุณใช้มันก็โอเค แต่มีสิ่งหนึ่งที่สำคัญ: ตัวคั่นจะเป็นตัวระบุระบบเมื่อคุณถามระบบสำหรับไดเรกทอรีหรือเส้นทาง ดังนั้นสมมติว่าคุณต้องการระเบิดเส้นทางรวมเข้าไปในส่วนของมัน:

$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!!!

การเข้ารหัสไฟล์และตัวคั่น

คุณควรตั้งค่า IDE ของคุณเพื่อตั้งค่าการเข้ารหัสไฟล์สำหรับสคริปต์ทั้งหมดของคุณเป็น UTF-8 แทน Cp * และตัวคั่นบรรทัดไฟล์เป็น Unix ( "\n"แทน"\r\n") ในกรณีส่วนใหญ่มันจะไม่สำคัญ แต่คุณควรจะสอดคล้องกันและวิธีที่ดีที่สุดคือวิธี Unix (ซึ่งทำงานได้ดีบน Windows แต่ไม่ใช่ในทางกลับกัน)


1
สำหรับสตริงที่คุณอาจพบปัญหาเกี่ยวกับบรรทัดใหม่ PHP ยังมีค่าคงที่ PHP_EOL ซึ่งใช้อักขระบรรทัดใหม่ที่ถูกต้องสำหรับแพลตฟอร์มปัจจุบัน
Jonathan Patt

5
ผู้คนใช้แบ็กสแลชในเส้นทางของพวกเขาใน PHP / Windows? แม้ว่าฉันจะไม่ได้ใช้ PHP เป็นครั้งแรกบน Linux แต่ฉันก็ควรหลีกเลี่ยงแบ็กสแลชเพียงเพราะพวกเขากำลังหลบหนีสิ่งต่างๆ
cHao

2
ไม่ควรเป็น "คลาส \\ myClass.php" ใช่หรือไม่
luiscubal

@ luiscubal ใช่แล้วตั้งแต่ฉันใช้เครื่องหมายคำพูดคู่ ...
yannis

3
Case Sensitivity และการเข้ารหัสไฟล์เป็นสองสิ่งที่ทำให้ฉันมีปัญหาระหว่าง Windows / Linux
Rangoric

6

คุณไม่สามารถทำงานstrftime()ด้วย%eในสภาพแวดล้อม Windows ดังที่ระบุไว้ในหน้าคู่มือ :

ไลบรารี C ของคุณอาจไม่รองรับตัวระบุการแปลงทั้งหมดซึ่งในกรณีนี้ PHP จะไม่รองรับ Strftime () นอกจากนี้บางแพลตฟอร์มจะไม่สนับสนุนการประทับเวลาเชิงลบดังนั้นช่วงวันที่ของคุณอาจถูก จำกัด ไว้ไม่เกิน Epoch ของ Unix ซึ่งหมายความว่า% e,% T,% R และ,% D (และอาจเป็นอย่างอื่น) - เช่นเดียวกับวันที่ก่อน 1 มกราคม 1970 - จะไม่ทำงานบน Windows, Linux ดิสทริบิวชันบางตัวและระบบปฏิบัติการอื่น ๆ สำหรับระบบ Windows ภาพรวมที่สมบูรณ์ของการสนับสนุนการแปลง specifiers สามารถพบได้ที่» MSDN


4

จะไม่มีปัญหาในการเรียกใช้รหัส หากคุณแก้ไขไฟล์ที่บันทึกไว้ใน Windows ใน Linux คุณอาจสังเกตเห็นว่าตัวอักขระสุดท้ายของบรรทัดอาจแตกต่างกัน ถ้ามันรบกวนคุณกำหนดค่า windows IDE / editor ของคุณให้ใช้ Unix end of line


3

ตั้งค่าตัวคุณเองด้วย Linux testbed มันอาจเป็นคอมพิวเตอร์ Linux เสมือนที่ทำงานภายใต้ Windows มันอาจเป็นคอมพิวเตอร์ดูอัลบูตมันอาจเป็นระบบของเพื่อนก็ได้ จากนั้นทุก ๆ ครั้ง (เช่นเช้าวันจันทร์) ให้ย้ายรหัสของคุณไปยังระบบ Linux และทดสอบ

คำตอบอื่น ๆ จัดการกับปัญหาหลักที่คุณจะเผชิญ แต่มี gotchas ขนาดเล็กจำนวนมากเช่น:

  • ไดเรกทอรี temp อยู่ในตำแหน่งอื่น
  • สิทธิ์ของไฟล์และไดเรกทอรีแตกต่างกัน
  • ระบบ () ฟังก์ชั่นการเปลี่ยนแปลงที่รุนแรง
  • ชื่อผู้ใช้ที่ Apache เรียกใช้เป็นการเปลี่ยนแปลง
  • สิ่งที่ทำงานภายใต้ Windows XP อาจล้มเหลวใน Windows 8

ใช่มีวิธีที่จะหลีกเลี่ยงความแตกต่างเหล่านี้อย่างรอบคอบ แต่คุณระวังที่จะใช้วิธีแก้ไขปัญหาเหรอ? ไม่แน่นอน - คุณเขียนโค้ดและมันวิ่งได้ดังนั้นมันจะต้องโอเค

อย่าวางอะไรบนคอมพิวเตอร์โฮสต์จนกว่าจะได้รับการทดสอบในระบบปฏิบัติการที่คล้ายกัน

ฉันไม่มีประสบการณ์ในการย้ายระบบจาก Windows ไปยัง Linux แต่ฉันมีประสบการณ์ในการย้ายระบบจาก Linux ไปยัง Windows และประสบการณ์เพิ่มเติมในการย้ายระบบจาก Linux ไปยัง OS X สามารถทำได้ แต่กุญแจคือการทดสอบทดสอบและทดสอบ


1

แม้ว่าฉันจะค่อนข้างสะดวกสบายในบรรทัดคำสั่ง Linux และด้วยเครื่องมือการแก้ไข Linux เช่น vim ฉันทำส่วนใหญ่ของการพัฒนา PHP ของฉันบนเครื่อง windows

ฉันมีเซิร์ฟเวอร์เสมือนบนอินเทอร์เน็ต (ให้ฉันประมาณ $ 20 ต่อเดือน) ที่ฉันใช้เป็นเซิร์ฟเวอร์การพัฒนาและฉันเชื่อมต่อกับมันโดยใช้ FileZilla FileZilla ดาวน์โหลดไฟล์ที่ฉันกำลังแก้ไขไปยังไดเรกทอรีชั่วคราวและติดตามการบันทึกและเมื่อฉันบันทึกมันจะโยนมันกลับไปยังเซิร์ฟเวอร์ dev และทดสอบจากที่นั่น

มันค่อนข้างยุ่งยากนิดหน่อย แต่ก็ช่วยให้ฉันสามารถพัฒนาได้ทุกที่ การใช้ FileZilla และตัวแก้ไขอย่างง่ายบน thumb drive ฉันสามารถเชื่อมต่อจากคอมพิวเตอร์เครื่องอื่นและทำการเปลี่ยนแปลงได้ การทดสอบทั้งหมดอยู่บนเซิร์ฟเวอร์ Linux เสมอดังนั้นฉันจึงพบปัญหาใด ๆ ที่ฉันอาจเกิดขึ้นจากกล่อง - มีความไม่พอใจที่ไม่พึงประสงค์น้อยลงเมื่อฉันโยนรหัสไปยังเซิร์ฟเวอร์

คุณสามารถทำสิ่งเดียวกันกับบัญชีโฮสติ้งราคาถูก (แต่ขึ้นอยู่กับประเภทของแอพพลิเคชั่นที่คุณกำลังพัฒนาคุณอาจพบปัญหาเรื่องประสิทธิภาพเนื่องจากบัญชีโฮสติ้งราคาถูกมักจะมีปัญหา) และแอพพลิเคชัน FTP อื่น ๆ ฟังก์ชั่นอัพโหลด


1

ใช่มันสามารถทำได้ แต่หลายสิ่งที่คุณต้องพิจารณา ตรวจสอบคำตอบสำหรับข้อมูลเพิ่มเติม

มันเป็นสิ่งหนึ่งที่นักพัฒนาบางครั้งต้องทำเนื่องจากทรัพยากรไม่ใช่เพราะพวกเขาชอบ

คุณอาจมีเว็บเซิร์ฟเวอร์ในพื้นที่ (apache, cherokee, แม้แต่ M $), ในพีซีของคุณและติดตั้งเซิร์ฟเวอร์ PHP และพีซีของคุณอาจไม่มีการเชื่อมต่ออินเทอร์เน็ตหรือสามารถเชื่อมต่อได้ในช่วงเวลาสั้น ๆ เท่านั้น

หลังจากนั้นคุณสามารถอัปเดตเว็บไซต์จริงอัปเดตไฟล์ของคุณไปยังเซิร์ฟเวอร์จริงด้วยเครื่องมือ ftp ด้วยพีซีเครื่องเดียวกันหรือพีซีเครื่องอื่นที่เชื่อมต่อกับอินเทอร์เน็ต


0

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.