क्या विंडोज पर PHP अनुप्रयोगों को प्रभावी ढंग से विकसित करना संभव है जो लिनक्स पर चलने वाले सर्वर पर तैनात किए जाएंगे?


19

क्या विंडोज पर PHP को कोड करना और लिनक्स चलाने वाले सर्वर पर बाद में होस्ट करना ठीक है? क्या ऐसी परियोजना के प्रवास में कोई समस्या हो सकती है?

मुझे लगता है कि वास्तव में कोई समस्या नहीं हो सकती है, खासकर जब से मैं PHP में शुरुआत कर रहा हूं और मैं किसी भी उन्नत कार्यों का उपयोग नहीं करूंगा जो ओएस-विशिष्ट हो सकते हैं। हालाँकि, मैं यह सुनिश्चित करना चाहूंगा कि चूंकि मुझे वास्तव में लिनक्स बिल्कुल पसंद नहीं है।


1
आपकी समस्या का सरल समाधान एक लिनक्स वीएम है जिसमें सांबा विंडोज होस्ट पर चल रहा है।
ट्रेकोडर

हां, यह किया जा सकता है, लेकिन कई चीजें जिन पर आपको विचार करना चाहिए। अधिक जानकारी के लिए उत्तर की जाँच करें। यह उन चीजों में से एक है जो डेवलपर्स को संसाधनों के कारण करना है, इसलिए नहीं कि वे इसे पसंद करते हैं।
umlcat

जवाबों:


27

कुछ संकेत:

फाइलसिस्टम केस संवेदनशीलता

यदि आपकी फ़ाइल को HelloWorld.php कहा जाता है:

include "helloworld.php";

विंडोज पर वैध है और काम करेगा। लेकिन लिनक्स फ़ाइल नाम केस संवेदी होते हैं, तो आप कहा जाता फ़ाइलों हो सकता है HelloWorld.php, helloworld.php, hEllOwOrlD.phpएक ही निर्देशिका में। इसलिए आपको विंडोज पर विकसित करना चाहिए जैसे कि आप एक केस सेंसिटिव फाइल सिस्टम पर विकसित कर रहे थे: बिल्कुल सही फाइलनेम, डायरेक्टरी नाम, एक्सटेंशन नाम का उपयोग करें - .phpयह भी अलग है .PHP

निर्देशिका और पथ विभाजक

विंडोज में हम कहते हैं:

include 'classes\myClass.php';

लेकिन लिनक्स में हम कहेंगे:

include 'classes/myClass.php';

PHP, देखभाल न करने के लिए पर्याप्त स्मार्ट है, दोनों विभाजक दोनों प्रणालियों में काम करते हैं। लेकिन आपको लगातार रहना चाहिए और हर जगह स्लैश (/) के साथ जाना चाहिए क्योंकि यह अधिकांश सिस्टम पर भी आदर्श है। एक निफ्टी पूर्वनिर्धारित स्थिरांक है DIRECTORY_SEPARATOR जो सही एक में अनुवाद करता है, यदि आप उस तक जाना चाहते हैं:

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

वही पथ विभाजक के लिए जाता है, जो विंडोज पर अर्धविराम है, अन्यथा बृहदान्त्र। तो सुरक्षित होने के लिए आपको करना चाहिए:

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 को Cp * के बजाय UTF-8 में अपनी सभी स्क्रिप्ट्स के लिए फ़ाइल एन्कोडिंग सेट करने के लिए सेट करना चाहिए, और फ़ाइल लाइन सीमांकक को Unix ( "\n"इसके बजाय "\r\n") में वितरित करना चाहिए । ज्यादातर मामलों में यह वास्तव में मायने नहीं रखता है, लेकिन आपको सुसंगत होना चाहिए और सबसे अच्छा तरीका यूनिक्स तरीका है (जो विंडोज पर ठीक काम करता है, लेकिन इसके विपरीत नहीं)।


1
स्ट्रिंग्स के लिए जहां आप नईलाइन समस्याओं में भाग सकते हैं, PHP में PHP_EOL निरंतर भी शामिल है जो वर्तमान प्लेटफ़ॉर्म के लिए सही न्यूलाइन वर्ण का उपयोग करता है।
जोनाथन पैट

5
लोग वास्तव में PHP / Windows में अपने पथ में बैकस्लैश का उपयोग करते हैं? यहां तक ​​कि अगर मैंने पहली बार लिनक्स पर PHP का उपयोग नहीं किया था, तो मैं बैकस्लैश से सिर्फ इसलिए बचूंगा क्योंकि वे सामान से बचने के लिए हैं।
cHao

2
क्या यह "class \\ myClass.php" नहीं होना चाहिए?
१२:११ पर लुसिबुबल

@luiscubal हाँ, जब से मैं दोहरे उद्धरण चिह्नों का उपयोग कर रहा हूँ ... धन्यवाद, जो एकल उद्धरणों के लिए संपादित किया गया है।
यानिस

3
केस सेंसिटिविटी और फ़ाइल एन्कोडिंग दो हैं जो मुझे हमेशा विंडोज / लिनक्स के बीच परेशानी का कारण बनाते हैं।
रंगोरिक

6

आप नहीं चल सकता strftime()के साथ %e, विंडोज वातावरण में के रूप में में जाना जाता है मैन्युअल पृष्ठ :

सभी रूपांतरण विनिर्देशक आपकी सी लाइब्रेरी द्वारा समर्थित नहीं हो सकते हैं, जिस स्थिति में वे PHP के स्ट्रैपटाइम () द्वारा समर्थित नहीं होंगे। इसके अतिरिक्त, सभी प्लेटफ़ॉर्म नकारात्मक टाइमस्टैम्प का समर्थन नहीं करते हैं, इसलिए आपकी तिथि सीमा यूनिक्स युग से पहले नहीं तक सीमित हो सकती है। इसका मतलब है कि% e,% T,% R और,% D (और संभवतः अन्य) - साथ ही 1 जनवरी, 1970 से पहले की तारीखें - विंडोज, कुछ लिनक्स वितरण और कुछ अन्य ऑपरेटिंग सिस्टम पर काम नहीं करेंगे। विंडोज सिस्टम के लिए, समर्थित रूपांतरण विनिर्देशकों का पूरा अवलोकन » MSDN पर पाया जा सकता है ।


4

कोड को चलाने में कोई समस्या नहीं होगी। यदि आप लिनक्स में विंडोज पर सेव की गई फाइल्स को एडिट करते हैं तो आप देख सकते हैं कि लाइन कैरेक्टर्स का अंत अलग हो सकता है, लेकिन इससे कुछ भी नुकसान नहीं होगा। यदि यह आपको परेशान करता है तो आप अपने विंडोज आईडीई / संपादक को लाइन के यूनिक्स अंत का उपयोग करने के लिए कॉन्फ़िगर करें।


3

लिनक्स परीक्षण के साथ खुद को सेट करें। यह विंडोज के तहत चलने वाला एक वर्चुअल लिनक्स कंप्यूटर हो सकता है, यह एक डुअल-बूट कंप्यूटर हो सकता है, यह एक दोस्त का सिस्टम हो सकता है। फिर, हर बार एक बार (जैसे सोमवार सुबह), अपने कोड को लिनक्स सिस्टम पर पोर्ट करें और उसका परीक्षण करें।

अन्य उत्तर आपके द्वारा सामना की जाने वाली प्राथमिक समस्याओं को संभालेंगे, लेकिन कई छोटी छोटी समस्याएं हैं, जैसे:

  • अस्थायी निर्देशिका एक अलग स्थान पर है
  • फ़ाइल और निर्देशिका अनुमतियाँ भिन्न हैं
  • सिस्टम () फ़ंक्शन कट्टरपंथी परिवर्तन करता है
  • उपयोगकर्ता नाम जिसे अपाचे परिवर्तन के रूप में चलाता है
  • विंडोज एक्सपी के तहत काम करने वाली चीजें विंडोज 8 के तहत विफल हो सकती हैं।

हां, इन सभी मतभेदों के बारे में सावधानी से काम करने के तरीके हैं, लेकिन क्या आप काम के आसपास का उपयोग करने के लिए सावधान थे? निश्चित रूप से नहीं - आपने कोडित किया है और यह भाग गया है इसलिए यह ठीक होना चाहिए।

एक होस्ट कंप्यूटर पर तब तक कुछ न डालें जब तक कि यह एक समान ऑपरेटिंग सिस्टम पर परीक्षण नहीं किया गया हो।

मुझे विंडोज से लिनक्स में पोर्ट करने का कोई अनुभव नहीं है, लेकिन मेरे पास लिनक्स से विंडोज तक पोर्ट करने के लिए कुछ अनुभव है और लिनक्स से ओएस एक्स के लिए अधिक अनुभव पोर्टिंग है। यह किया जा सकता है, लेकिन चाबियाँ परीक्षण, परीक्षण और परीक्षण कर रही हैं।


1

भले ही मैं लिनक्स कमांड-लाइन पर काफी सहज हूं और लिनक्स एडिटिंग टूल्स जैसे विम के साथ, मैं अपना ज्यादातर PHP डेवलपमेंट एक विंडो मशीन पर करता हूं।

मेरे पास इंटरनेट पर एक आभासी सर्वर है (मुझे लगभग $ 20 प्रति माह चलता है) जिसे मैं एक विकास सर्वर के रूप में उपयोग करता हूं, और मैं इसे फाइलज़िला का उपयोग करके कनेक्ट करता हूं। FileZilla उन फ़ाइलों को डाउनलोड करता है जिनका मैं एक अस्थायी निर्देशिका में संपादन कर रहा हूं और सेव का ट्रैक रखता है और जब मैं इसे सहेजता हूं तो इसे वापस देव सर्वर पर फेंकता है, और मैं इसे वहां से परीक्षण करता हूं।

यह थोड़ा बोझिल है, लेकिन मुझे विकास को कहीं भी करने की अनुमति देता है; FileZilla और अंगूठे ड्राइव पर एक साधारण संपादक का उपयोग करके मैं दूसरे कंप्यूटर से भी कनेक्ट कर सकता हूं और बदलाव कर सकता हूं। सभी परीक्षण हमेशा लिनक्स सर्वर पर होते हैं, इसलिए मैं किसी भी समस्या को पकड़ता हूं जो मुझे बॉक्स से बाहर हो सकती है - जब मैं सर्वर पर कोड फेंकता हूं तो कम अप्रिय सर्प्राइज़।

आप एक सस्ते होस्टिंग खाते के साथ एक ही काम कर सकते हैं (हालाँकि आप किस तरह के अनुप्रयोग विकसित कर रहे हैं, इस पर निर्भर करता है कि आप प्रदर्शन के मुद्दों में भाग ले सकते हैं क्योंकि सस्ते होस्टिंग खाते आमतौर पर काफी कम होते हैं) और अन्य कई एफ़टीपी अनुप्रयोगों में भी संपादन होता है- और कार्यक्षमता अपलोड करें।


1

हां, यह किया जा सकता है, लेकिन कई चीजें जिन पर आपको विचार करना चाहिए। अधिक जानकारी के लिए उत्तर की जाँच करें।

यह उन चीजों में से एक है, कभी-कभी डेवलपर्स को संसाधनों के कारण करना पड़ता है, इसलिए नहीं कि वे इसे पसंद करते हैं।

आपके पीसी में और PHP सर्वर में एक स्थानीय वेब सर्वर (एपाचे, चेरोकी, यहां तक ​​कि एम $) हो सकता है। और आपके पीसी में इंटरनेट कनेक्शन नहीं हो सकता है, या केवल थोड़े समय के लिए कनेक्ट हो सकता है।

बाद में आप एक वास्तविक वेबसाइट को अपडेट कर सकते हैं, अपनी फ़ाइल को असली सर्वर में अपडेट कर सकते हैं, उसी पीसी या किसी अन्य पीसी के साथ, इंटरनेट से जुड़े।


0

जैसा कि ज्यादातर लोगों ने कहा कि वास्तव में मुद्दे नहीं होने चाहिए। उस ने कहा, वर्चुअलबॉक्स यह वास्तव में, वास्तव में लाइनक्स वर्चुअल मशीन को खड़ा करने के लिए आसान बनाता है जिसे आप अपने कोडबेस का परीक्षण कर सकते हैं यह सुनिश्चित करने के लिए कि यह उत्पादन वातावरण में काम किए बिना उत्पादन वातावरण में काम करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.