2009-03-21 10 views
5

मेरे सामने इतने सारे लोगों की तरह, मैं कुछ छवि थंबनेलिंग करने के लिए एक PHP स्क्रिप्ट लिख रहा हूं। लिपि ने WOMM (मेरी मशीन पर काम करता है) प्रमाणन अर्जित किया है, लेकिन जब मैं इसे अपने होस्ट (1 & 1 बेसिक) पर ले जाता हूं, तो कोई समस्या है: किसी निश्चित फ़ाइलइज़ के ऊपर की छवियों को संसाधित नहीं किया जा सकता है। मैंने सभी परिचालनों को फाइल सिस्टम में स्थानांतरित कर दिया है, यह सुनिश्चित करने के लिए कि यह कुछ गुप्त POST समस्या नहीं है। यहाँ प्रासंगिक कोड है:imagecreatefromjpeg चुपचाप स्क्रिप्ट को समाप्त कर रहा है


function cropAndResizeImage($imageLocation) 
{ 
    // 
    // Just to be certain 
    // 
    ini_set('display_errors','on'); 
    error_reporting(E_ALL); 
    ini_set('memory_limit','128M'); 
    ini_set('max_execution_time','300'); 

    $image_info = getimagesize($imageLocation); 
    $image_width = $image_info[0]; 
    $image_height = $image_info[1]; 
    $image_type = $image_info[2]; 

    switch ($image_type) 
    { 
    // snip... 
    case IMAGETYPE_JPEG: 
     $image = imagecreatefromjpeg($imageLocation); 
     break; 

    default: 
     break; 
    } 

    // snip... 
} 

println डिबगिंग के अपने रहस्यमय शक्तियों का उपयोग करना, मैं निर्धारित करने के लिए कि imagecreatefromjpeg नहीं लौटा रहा है कर लिया है; वास्तव में, स्क्रिप्ट पूरी तरह से बंद हो जाती है जब यह हो जाता है। कुछ तथ्यों:

  • यह फाइलसाइज से संबंधित है। 1 एमबी के तहत छवियां ठीक (स्पॉट-चेक) दिखाई देती हैं, लेकिन 3 एमबी बारफ के आसपास की छवियां। कोई सुराग नहीं है कि सटीक कटऑफ क्या है।
  • यह सर्वर टाइमआउट के कारण नहीं है; wget < में 3 एमबी छवियों पर 1s, "उचित रूप से छोटी" छवियों पर काफी लंबा (बड़ी छवियों की कोई प्रसंस्करण इंगित नहीं करता)।
  • त्रुटियों को दबाने के लिए @ के साथ फ़ंक्शन कॉल को उपसर्ग करना कोई प्रभाव नहीं पड़ता है। यह इस तथ्य से अच्छी तरह से मेल खाता है कि स्क्रिप्ट एक त्रुटि नहीं फेंक रही है, यह आसानी से इस फ़ंक्शन कॉल पर चुपचाप समाप्त हो रही है।

तो मुझे लगता है कि करने के लिए किया था, वहाँ कुछ जी.डी. पैरामीटर है कि मैं के बारे में पता नहीं है (या की पहुंच है) कि 1 & 1 के सर्वर पर इनपुट फ़ाइल आकार को सीमित करता है हो सकता है — config चर अनुमान की वजह से है तथ्य यह है कि यह तुरंत barfs, और छवि पर किसी भी वास्तविक लोडिंग या computations करने के लिए (heuristically) प्रकट नहीं होता है।

कोई सुझाव? सहायता के लिए धन्यवाद।

अद्यतन (सौजन्य @Darryl's टिप्पणियाँ): phpinfo करने के लिए कॉल संकेत मिलता है कि पीएचपी max_execution_time और memory_limit वेरिएबल ठीक से अपडेट कर रहा है। इसका जरूरी अर्थ यह नहीं है कि इन संसाधनों को आवंटित किया जा रहा है, बस वे उम्मीद के अनुसार काम कर रहे हैं।

अद्यतन 2: गूगल से कुछ संदर्भों के बाद, मैं कोई भाग्य के साथ जेपीईजी (3MB से 200KB करने के लिए गुणवत्ता में कमी) के अनुकूलन करने की कोशिश की, तो यह एक छवि फ़ाइल आकार मुद्दा नहीं है। इसके बाद मैंने मूल 3888x2592 छवि के पिक्सल की संख्या को कम करने की कोशिश की, और पहला सफल आकार 1400x2592 (1401x और 1402x दोनों परिणामस्वरूप आधा-पारदर्शी और त्रुटियां "विकृत जेपीईजी" का संकेत देती हैं, जो पूरी छवि तक अधिक समझ नहीं लेती लोड नहीं किया जा रहा है)। 1300x2592 तक और कम करके, मैं 400x300 थंबनेल छवि को तुरंत चालू कर सकता हूं जिसे मैं वास्तव में ढूंढ रहा हूं; 1400x2592 पर, imagecreatetruecolor कॉल जो मैं उस कार्य का ख्याल रखने के लिए उपयोग कर रहा हूं, चुपचाप imagecreatefromjpeg जैसा विफल रहता है।

यह क्यों है, मैं थोड़ा अनिश्चित हूं। 1400 * 25 9 2 == 3.5 एमबी कुछ विशेष रूप से सार्थक नहीं देता है, लेकिन मुझे कल्पना करना है कि यह पिक्सल की संख्या पर एक सीमा है जीडी + PHP प्रक्रिया करेगा।

उत्तर

1

मुझे अनुमान है कि1 आपको memory_limit या max_execution_time स्क्रिप्ट बदलने की अनुमति नहीं देता है, इसलिए यह शायद स्मृति से बाहर हो रहा है। क्या सीमाएं देखने के लिए आपने phpinfo() चलाने का प्रयास किया है?

+0

हे Darryl - मैं वास्तव में यह पता लगाने के लिए हैरान था, लेकिन 1 और 1 * प्रकट होता है * इन पैरामीटर को सेट करने की अनुमति देने के लिए। कम से कम, जब मैं उन्हें सेट करता हूं और phpinfo() चलाता हूं, तो यह सब अपेक्षित के रूप में दिखाई देता है। क्या यह संभव है कि उन्हें माध्यमिक प्रवर्तन प्रणाली मिल गई हो? – kyle

2

कृपया PHP वेबसाइट पर स्मृति उपयोग के संबंध में this note देखें।

* "स्मृति imagecreatefromjpeg का उपयोग कर() एक छवि लोड करने के लिए आवश्यक छवि के आयाम के एक समारोह और छवियों के बिट गहराई, एक ओवरहेड द्वारा गुणा है

यह इस सूत्र से गणना कर सकते हैं:।

न्यू बाइट्स = चौड़ाई * ऊँचाई * बाइट प्रति पिक्सेल * ओवरहेड फज कारक "*

+0

हाय जेसी - जब मैं 1 एम तक स्मृति आवंटन को कम करता हूं और एक छोटी छवि का उपयोग करता हूं, तो मुझे यह त्रुटि मिलती है: " घातक त्रुटि: 1048576 बाइट्स की स्वीकृत स्मृति आकार समाप्त हो गई है (4096 बाइट आवंटित करने का प्रयास किया गया है)/homepages/17/d203907073 लाइन 98 पर /htdocs/dis/dev/inc/image.functions.php "(... जारी ...) – kyle

+0

(... जारी ...) क्योंकि सर्वर सही ढंग से" स्मृति से बाहर "त्रुटियों को फेंक रहा है इस मामले में, मुझे लगता है कि यह एक अलग कारण है, क्योंकि मेरे मामले में कोई त्रुटि नहीं फेंक दी गई है। किसी भी दर पर, 3 एमबी छवि लगभग 3Kx3K पिक्सेल है, जो अल्फा और 2x धुंध कारक के साथ लगभग 70 एमबी का अनुवाद करती है। – kyle

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