2011-02-04 19 views
14

पर ले जाना हमें लगभग 50+ एप्लिकेशन (छोटे/बड़े) को PHP 5.3 (PHP 4.1 से) में स्थानांतरित करना होगा। क्या किसी के पास इस तरह के कार्य के साथ कोई अनुभव है?आपका अनुभव PHP 4 को PHP 5

  • समय
  • उपकरण
  • पर्यावरण के लिए सबसे अच्छा सेटअप की आवश्यकता नहीं (सर्वर/टेस्ट?)

यह भावना पीएचपी 5.2 करने के लिए पहले स्थानांतरित करने के लिए बनाने के करता है? PHP 5 में काम नहीं करेगा "PHP 4 फीचर्स" का उपयोग कर स्वचालित पहचान अनुप्रयोगों का कोई तरीका है?

मुझे नहीं पता कि इस तरह की एक परियोजना को कैसे संभाला जाए। धन्यवाद!

+3

एआरएम .... शुभकामनाएं। – sevenseacat

उत्तर

6
  1. कक्षाओं के लिए वाक्य रचना के कुछ PHP4 और PHP5 के बीच बदल गया है - उदाहरण के लिए, PHP4 में, निर्माता विधि वर्ग के रूप में एक ही नामित किया गया था, जबकि PHP5 में, निर्माता __construct() नाम पर है।

    PHP5 अभी भी PHP4-शैली की कक्षा परिभाषाओं का सामना कर सकता है, इसलिए आपका कोड अभी भी काम करने की संभावना है, लेकिन फिर भी आपको अच्छी तरह से नई शैली में बदलने की सलाह दी जाएगी, क्योंकि ऐसी कई विशेषताएं हैं जो आप नहीं होंगे अन्यथा उपयोग करने में सक्षम। इसके अलावा, निश्चित रूप से, पुराने वाक्यविन्यास अंततः हटा दिया जाएगा; भविष्य में आपके PHP4 कक्षाएं तोड़ जाएंगी, अब तक प्रतीक्षा करने के बजाय उन्हें बदलने के लिए बेहतर है।

  2. ग्लोबल्स। आप PHP12 में $_REQUEST, $_POST, $_GET और $_COOKIES का उपयोग कर रहे हैं, बहुत पुराना कोड अभी भी पुरानी शैली ऑटो-ग्लोबल्स का उपयोग कर रहा है जो मानक मानक PHP3 था। यह एक बड़ा सुरक्षा जोखिम है, इसलिए यदि आप अभी भी register_globals का उपयोग कर रहे हैं, तो आपको कम से कम $_REQUEST का उपयोग करने के लिए अपने कोड पर काम करना शुरू कर देना चाहिए, इसके बजाय आपने ऑटो-ग्लोबल का उपयोग किया है। यह वास्तव में एक बहुत ही कठिन कार्य हो सकता है - यह काम करने की कोशिश कर रहे एक बड़े अनुप्रयोग के माध्यम से ट्रैवल करना मुश्किल हो सकता है कि कौन से चर ग्लोबल्स होने का इरादा रखते हैं और जो नहीं हैं, जब कोड में कुछ भी नहीं है या दूसरे को इंगित करने के लिए । इसे किसी ऐसे व्यक्ति से लें जिसे इसे करना है, यह असली दुःस्वप्न हो सकता है। लेकिन यह PHP5 पर जाने के लिए कुछ विशिष्ट नहीं है - जैसा कि मैंने कहा था, भले ही आप PHP4 से चिपके हों, आपको वास्तव में इस समस्या से निपटने की आवश्यकता है। PHP5 कुछ भी नहीं बदलता है, सिवाय इसके कि register_globals झंडा अब स्विच होने के लिए डिफॉल्ट किया गया है, जो आपको वास्तव में इस काम को करने के लिए थोड़ा अधिक उत्साह दे सकता है।

  3. यदि आप किसी भी ereg_ regex फ़ंक्शंस का उपयोग करते हैं, तो इन्हें बहिष्कृत कर दिया गया है। आपको उन्हें समतुल्य preg_ कार्यों के साथ प्रतिस्थापित करना चाहिए। यह एक बड़ा काम नहीं है, और वास्तव में फ़ंक्शंस अभी भी उपलब्ध हैं, इसलिए यह प्रतीक्षा कर सकता है, जब तक कि आप चेतावनियों को अनदेखा करने के लिए तैयार हों जब तक कि आपको कार्य को बहिष्कृत नहीं किया जाता है। लेकिन फिर, कक्षा वाक्यविन्यास के साथ, अब उन्हें बदलने पर विचार करना समझदार हो सकता है।

  4. एक और विशेषता जो बदल गई है, जहां पुराना वाक्यविन्यास बहिष्कृत किया गया है, पास-बाय-रेफरेंस है।PHP4 में, हमें संदर्भ द्वारा चर पारित करने के लिए फ़ंक्शन कॉल में & वर्ण का उपयोग करने के लिए प्रोत्साहित किया गया था। PHP5 में, इसे करने का सही तरीका & वर्ण को फ़ंक्शन घोषणा में रखना है, जहां आप इसे कॉल करते हैं। फिर, पुराना वाक्यविन्यास अभी भी काम करता है, लेकिन केवल तभी आप पूरे स्थान पर PHP फेंकने वाली चेतावनियों के साथ रख सकते हैं।

+0

यह __construct है, __constructor नहीं। यह भी उल्लेखनीय है कि बहुत पुराने सुपरग्लोबल्स ($ HTTP_POST_VARS, आदि) को PHP 4 ($ _POST, आदि के पक्ष में) में बहिष्कृत किया गया था और मुझे नहीं लगता कि वे PHP 5 में भी मौजूद हैं। –

+0

@ Daniel15 - oops '__construct()' पर; इसे स्पॉट करने के लिए धन्यवाद, मैंने जवाब संपादित कर लिया है। पुरानी superglobals पुन: वे अभी भी मौजूद हैं; बहिष्कृत, लेकिन अभी भी इस पल के लिए वहाँ। हालांकि वे सुपरग्लोबल्स नहीं हैं, इसलिए वे '$ _POST' आदि के रूप में कार्यात्मक नहीं हैं और भविष्य में उन्हें किसी भी समय हटा दिया जाएगा, इसलिए अब उनका उपयोग करने का अच्छा विचार नहीं है। – Spudley

3

यदि आप error_reporting चालू करते हैं और इसे E_ALL पर सेट करते हैं तो आपको बहिष्कृत त्रुटियां आदि देखने में सक्षम होना चाहिए। मैं PHP5.2 और फिर 5.3 को लक्षित करने से परेशान नहीं हूं।

निर्भर करता है कि क्या आप केवल ऐप्स को काम करना चाहते हैं या यदि आप नई PHP सुविधाओं और प्रदर्शन सुधारों का लाभ उठाना चाहते हैं। अगर उन्हें केवल काम करने की ज़रूरत है तो केवल त्रुटियों को ठीक करें और E_DEPRECATED और E_NOTICE चेतावनियों को अनदेखा करें।

यदि परियोजनाओं को शुरू करने के लिए एक सभ्य तरीके से लिखा गया था तो उन्हें अपग्रेड करना बहुत कठिन नहीं होना चाहिए।

यह कहना नहीं है कि यह एक बहुत ही उबाऊ और कठिन काम नहीं होगा। यह आपकी अपेक्षा से कहीं अधिक समय लेगा; विशेष रूप से 50 ऐप्स के लिए!

11

पढ़ने के लिए सबसे महत्वपूर्ण बात the php.net section on migrating from PHP 4 to PHP 5 होगी। चूंकि PHP 5 पहले बाहर आया था, इसलिए वे एक कठोर भाषा की तरफ बढ़ रहे हैं (PHP संस्करण 6 में डिफ़ॉल्ट रूप से सख्त मोड में होगा), इसलिए आपको बहुत चेतावनियों की अपेक्षा करनी चाहिए, यदि त्रुटियां नहीं हैं।

थे अधिक पश्चगामी-संगतता को तोड़ने बनाया के बाद से पीएचपी 5.0 बाहर आया परिवर्तन, पूर्णता के लिए आप भी पढ़ना चाहिए:

Migrating from PHP 5.0.x to PHP 5.1.x

Migrating from PHP 5.1.x to PHP 5.2.x

Migrating from PHP 5.2.x to PHP 5.3.x

मुझे लगता है कि एक है बहुत सी पढ़ाई है, लेकिन यह तोड़ने वाली हर चीज की एक व्यापक सूची होनी चाहिए।

5

सबसे पहले आपको php.ini सेटिंग्स, विशेष रूप से register_globals, magic_quotes_gpc जैसे जांचना चाहिए - यह आपके ऐप्स का तर्क तोड़ सकता है।

6

PHP_CompatInfo निर्भरताओं के लिए कुछ चेक के साथ मदद कर सकता है। पुरानी संरचनाओं को ढूंढने के साथ शायद PHP_CodeSniffer।

हालांकि, PHP संस्करणों के बीच अंतर अक्सर महिमा प्राप्त होते हैं। फ्रिंज मामलों पर भरोसा करने वाले कोड के साथ कभी भी बहुत सी समस्याएं नहीं थीं। बेशक यह कोड अभी भी लंबे सुपरग्लोबल्स $ HTTP_POST_VARS पर निर्भर करता है, फिर कुछ अन्य गॉथ की अपेक्षा की जा सकती है।

एक सहायक मुहावरा उदाहरण के लिए मैजिक_कोट्स निर्भरता को बदलने के लिए है:

$_POST = array_map("mysql_real_escape_string", $_POST); 

क्योंकि वास्तविक सबसे अनुप्रयोगों कभी नहीं कर रहे हैं फिर से लिखा अधिक समकालीन डेटाबेस API का उपयोग करने के लिए।

3

display_errors बंद करें, log_errors चालू करते हैं, -1 को error_reporting सेट और E_STRICT और E_DEPRECATED चेतावनी के लिए बाहर देखो।

This migration script (लापरवाह प्लग) कुछ बहिष्कृत चीजों के साथ आपकी मदद कर सकता है। यह 5.2 से 5.3 कहता है लेकिन 4 से भी माइग्रेट करने के लिए उपयोगी हो सकता है। और आप इसे खोज सकते हैं (पैच स्वागत है :) जिन चीज़ों को आप खोजते हैं, उनके लिए अक्सर सामना करना पड़ता है।

PHPStorm IDE में बहुत सभ्य कोड विश्लेषक है जो आपके कोड में कुछ संभावित समस्याओं को इंगित कर सकता है। इसे अपने ऐप के माध्यम से चलाएं और देखें कि इसमें कुछ दिलचस्प कहना है या नहीं। इसके अलावा यह आपको संभवतः त्रुटियों को खोजने में मदद करेगा जो नए कीवर्ड का उपयोग फ़ंक्शन नाम आदि के रूप में करने से कर सकते हैं।

अपने अंतिम प्रश्न के लिए: IMHO आपको 5.3 के साथ जाना चाहिए, नौकरी करना दो बार थोड़ा समझ में आता है।

+0

आदर्श रूप से, किसी को उत्पादन साइट पर वैसे भी 'display_errors' बंद करना चाहिए। – Spudley

+0

@ सिद्धांत में सिद्धांत, हां, लेकिन आपको आश्चर्य होगा कि "E_STRICT ने मेरा उत्पादन सर्वर तोड़ दिया" जैसी कई शिकायतें मैंने सुना है। लोग इस सलाह को अनदेखा करते हैं जैसे कल नहीं है। – StasM

संबंधित मुद्दे