2011-11-17 19 views
5

PHP में विभिन्न सत्रों के बीच साझा ऑब्जेक्ट कैसे बनाएं?PHP में विभिन्न सत्रों के बीच साझा ऑब्जेक्ट कैसे बनाएं?

मैं फ़ाइल या MySQL मेमोरी टेबल का उपयोग करने के बारे में सोच रहा हूं। फ़ाइल का उपयोग करना एक अच्छा विकल्प नहीं है क्योंकि इसमें लॉकिंग नहीं है और धीमा है। MySQL मेमोरी टेबल का उपयोग करना एक अच्छा विकल्प है, लेकिन क्लास इंस्टेंस (ऑब्जेक्ट्स) को किसी टेबल पर कैसे सहेजना है? किसी ऑब्जेक्ट को क्रमबद्ध करना और उसे टेबल पर रखना भी धीमा है।

Option 1: MySQL memory table 
Option 2: shm_attach,shm_detach,shm_get_var,shm_has_var,shm_put_var,.. 
Option 3: Memcache 

समस्या MySQL मेमोरी तालिका का उपयोग कर क्वेरीिंग की आवश्यकता है। मानक PHP स्थापना में Memcache शामिल नहीं है। विंडोज़ पर shm_ * फ़ंक्शंस रखने के लिए, इसे "--enable-sysvsem" विकल्प के साथ स्रोत से बनाया गया PHP प्राप्त करना आवश्यक है, और इसके लिए php.ini में सेटिंग की आवश्यकता है जहां डेवलपर हर समय तक पहुंचने में सक्षम नहीं हो सकता है।

उपरोक्त में से कौन सा बेहतर है? कोई अन्य विकल्प?

+1

साझा स्मृति एक विकल्प है: http://php.net/manual/en/function.shm-get-var.php –

+2

आप किस डेटा के बारे में बात कर रहे हैं? यह "ऑब्जेक्ट" कैसा दिखता है? – ManseUK

+0

यह एक वर्ग का एक उदाहरण है जिसमें बहु स्तरीय संरचना (बहु स्तरीय सरणी के समान) – jondinham

उत्तर

1

यदि आप अलग-अलग प्रक्रियाओं के बीच ऑब्जेक्ट्स (कक्षाओं के उदाहरण) साझा करना चाहते हैं, तो आप हमेशा serialize और unserialize तक बाध्य रहेंगे, भले ही आप किस प्रकार की स्टोरेज परत का उपयोग करें (डेटाबेस, मेमचेस, फाइल, ...)।

यदि आप serialize और unserialize का उपयोग नहीं करना चाहते हैं, तो आप ऐसा नहीं कर सकते हैं।

+0

मार्क बी ने php semaphore कार्यों shm_ * का उपयोग करने का सुझाव दिया है, लेकिन इसे सक्षम करने के लिए php.exe को पास करने वाले पैरामीटर की आवश्यकता है। यह मैं अपने पीसी पर कर सकता हूं लेकिन मेरे साझा होस्टिंग सर्वर पर नहीं। मैं अब बहुत उलझन में हूं – jondinham

+0

@ जोनडिंहम, भले ही आप फाइलों का उपयोग करते हैं, आपको डेटा को क्रमबद्ध करने की आवश्यकता है, है ना? – Pacerier

1

मुझे आंखों के विकास में एक समाधान के साथ एक समान समस्या को याद रखना याद है।

मुझे पता है कि आप फ़ाइल का उपयोग करने के लिए बिल्कुल बाहर निकलने के लिए बिल्कुल नहीं हैं, लेकिन यदि आप एक्सएमएल प्रारूप में साझा करने के लिए वेरिएबल (एस) स्टोर करना चाहते हैं तो क्या होगा।

यदि आप इसे कुछ सत्रों के लिए विशिष्ट बनाना चाहते हैं तो आप सत्रों के प्रत्येक सेट के लिए अद्वितीय टोकन (एक प्रकार का पासवर्ड) का उपयोग कर सकते हैं और एक नियंत्रक स्थापित कर सकते हैं जो टोकन के आधार पर सही सत्र xml फ़ाइल के अनुरोधों को निर्देशित करता है।

सुरक्षा के लिए आप xml जानकारी को php फ़ाइल में संग्रहीत कर सकते हैं और केवल सही टोकन का उपयोग करके POST द्वारा जानकारी पुनर्प्राप्त करने की अनुमति दे सकते हैं।

यह विधि आपको साझा सत्रों को सुरक्षित रूप से एक्सेस, संपादित और हटाने (नष्ट) करने की अनुमति देगी।

1

मेमकैच मानक PHP स्थापना में नहीं है। सेमफोर & साझा मेमोरी फ़ंक्शंस विंडोज पर समर्थित नहीं हैं।

अधिकतर एकमात्र समाधान ऑब्जेक्ट क्रमबद्धता के साथ MySQL मेमोरी टेबल का उपयोग कर रहा है।

1

मैं एपीसी उल्लेख नहीं दिख रहा है:

http://www.php.net/manual/en/book.apc.php

सुनिश्चित नहीं हैं कि अगर यह एक सत्र के भीतर के रूप में मैनुअल यह क्या करता है पर लेकिन अन्य पदों मैं मेम्कैश करने के लिए वैकल्पिक पर देखने में किसी भी जानकारी का अभाव है।

मैं पेज टेम्पलेट्स को संग्रहीत करने के लिए एक सिमुलेटर समाधान की तलाश में हूं, जिसे PHP का उपयोग करने के बजाय मेमोरी टेबल में प्रमाणीकृत उपयोगकर्ताओं को बहुत अधिक इस्तेमाल किया जा सकता है (दूसरे भाग में मुझे इतना यकीन नहीं है)।

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