2009-05-03 9 views
32

मेरे पास एक php फ़ंक्शन है जो मैंने लिखा है कि एक टेक्स्ट फ़ाइल लेगी और प्रत्येक पंक्ति को तालिका में अपनी पंक्ति के रूप में सूचीबद्ध करेगी।लाइन php द्वारा टेक्स्ट फ़ाइल लाइन में पढ़ें - न्यूलाइन नहीं पाया जा रहा है

समस्या क्लासिक "मेरी मशीन पर ठीक काम करती है" समस्या है, लेकिन निश्चित रूप से जब मैं किसी और को .txt फ़ाइल जेनरेट करने के लिए कहता हूं, तो मैं पूरी फाइल में 1 लाइन के रूप में पढ़ता रहता हूं। जब मैं इसे अपने टेक्स्ट एडिटर में खोलता हूं, तो ऐसा लगता है कि मैं इसे प्रत्येक पंक्ति पर एक नए नाम के साथ कैसे उम्मीद करूंगा, लेकिन यह नयालाइन चरित्र या इसे फेंकने वाला कुछ है।

अब तक मैं निष्कर्ष पर आया हूं कि उनके मैक सिस्टम पर जो भी टेक्स्ट एडिटर उपयोग कर रहा है, उसके साथ कुछ करने के लिए इसका कुछ हो सकता है।

क्या यह समझ में आता है? और क्या इस चरित्र का पता लगाने का कोई आसान तरीका है कि टेक्स्ट एडिटर एक नई लाइन के रूप में पहचान रहा है और इसे एक मानक के साथ प्रतिस्थापित कर सकता है जिसे PHP पहचान लेगा?

अद्यतन: निम्न पंक्ति को जोड़ने से समस्या हल हो गई।

ini_set('auto_detect_line_endings',true); 

फंक्शन:

function displayTXTList($fileName) { 
    if(file_exists($fileName)) { 
     $file = fopen($fileName,'r'); 
     while(!feof($file)) { 
      $name = fgets($file); 
      echo('<tr><td align="center">'.$name.'</td></tr>'); 
     } 
     fclose($file); 
    } else { 
     echo('<tr><td align="center">placeholder</td></tr>'); 
    }  
} 
+6

मैक, मैक नहीं, कृपया। –

उत्तर

30

यह आपके लिए काम नहीं करता है?

http://us2.php.net/manual/en/filesystem.configuration.php#ini.auto-detect-line-endings

+1

यह बंद हो जाता है, इसलिए शायद उसे इसके बारे में पता नहीं है। –

+0

क्या होगा यदि आपके पास php.ini फ़ाइल तक पहुंच नहीं है? मुझे यकीन नहीं है कि मैं इसे संशोधित करने में सक्षम हूं (मैं इसे औसत समय में देखूंगा) – TaRDy

+0

रनटाइम – empi

6

fgets का आदमी पृष्ठ से:

नोट: पीएचपी ठीक से लाइन अंत पहचानने नहीं है, तो जब पढ़ने या तो पर फाइल या Macintosh कंप्यूटर के द्वारा बनाई गई, auto_detect_line_endings रन सक्षम करने समय विन्यास विकल्प समस्या को हल करने में मदद कर सकता है।

इसके अलावा, क्या आपने file फ़ंक्शन का प्रयास किया है? यह एक सरणी देता है; सरणी में प्रत्येक तत्व फ़ाइल में एक रेखा से मेल खाता है।

संपादित करें: अगर आपके पास php.ini तक पहुंच नहीं है, तो आप किस वेब सर्वर का उपयोग कर रहे हैं? अपाचे में, आप a .htaccess file का उपयोग कर PHP सेटिंग्स बदल सकते हैं। ini_set फ़ंक्शन भी है जो रनटाइम पर सेटिंग बदलता है।

5

यह नई लाइन समस्या का क्लासिक मामला है।

ASCII कई अलग-अलग "न्यूलाइन" वर्णों को परिभाषित करता है। हम जिन दो विशिष्ट देखभाल करते हैं वे एएससीआईआईआई 10 (लाइन फीड, एलएफ) और 13 (कैरिज रिटर्न, सीआर) हैं।

ओएस एक्स, लिनक्स इत्यादि सहित सभी यूनिक्स-आधारित सिस्टम एलएफ का उपयोग एक नई लाइन के रूप में करेंगे। मैक ओएस क्लासिक ने सीआर को अलग-अलग इस्तेमाल किया, और विंडोज सीआर एलएफ का उपयोग करता है (यह सही है, एक नई लाइन के लिए दो अक्षर - देखें कि कोई भी विंडोज क्यों पसंद नहीं करता है? बस एक नई लाइन के रूप में मजाक कर रहा है)।

इसलिए, किसी मैक पर किसी से टेक्स्ट फाइलें (मान लीजिए कि यह एक आधुनिक ओएस है) सभी के पास एलएफ उनकी लाइन समाप्त होने के रूप में होगा। यदि आप उन्हें विंडोज़ पर पढ़ने की कोशिश कर रहे हैं, और विंडोज सीआर एलएफ की अपेक्षा करता है, तो उसे यह नहीं मिलेगा। अब, it has already been mentioned पीएचपी आप के लिए इस गंदगी को हल करने की क्षमता है, लेकिन यदि आप चाहें, यहाँ एक स्मृति-hogging समाधान है:

$file = file_get_contents("filename"); 
$array = split("/\012\015?/", $file); # won't work for Mac Classic 

बेशक, आप file() (as has already been mentioned) के साथ एक ही बात कर सकते हैं।

11

file() के साथ क्या गलत है?

foreach (file($fileName) as $name) { 
    echo('<tr><td align="center">'.$name.'</td></tr>'); 
} 
+3

ini_set ('auto_detect_line_endings', सत्य) के अतिरिक्त के बिना; यह समस्या की मदद करने के लिए प्रकट नहीं होता है। – TaRDy

+0

यह एक ** ** काम करता है ** – emaillenin

+1

यह भी ध्यान दिया जाना चाहिए कि 'फ़ाइल()' पूरी फ़ाइल को सरणी में, या अधिक विशेष रूप से स्मृति में पढ़ती है। यह समाधान, जबकि यह निश्चित रूप से काम करता है, बड़ी फ़ाइलों के साथ काम करते समय बीमार सलाह दी जाती है। – newfurniturey

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