मैं एक छवि प्रोसेसर PHP स्क्रिप्ट है के लिए सच देता है, और यह निम्नलिखित कोड शामिल हैं:पीएचपी is_readable गैर पठनीय फ़ाइल
if (!is_dir($fullFile)) {
if (is_readable($fullFile)) {
$im = getimagesize($fullFile); // Will be FALSE if not an image
कुछ उदाहरणों में, स्क्रिप्ट निम्न त्रुटि के साथ getimagesize पर विफल हो जाएगा:
getimagesize(/path/to/file.jpg) [function.getimagesize]: failed to open stream: Permission denied at www.yada.yada/page.php
इस मामले में, /path/to/file.jpg के लिए अनुमतियां निश्चित रूप से निषिद्ध हैं (400), इसलिए मुझे उम्मीद है कि मुझे उस बिंदु पर जाने से रोकने के लिए is_readable test की उम्मीद है। अलग-अलग अनुमतियों को सेट करने के अलावा, इसे हल करने के लिए मैं क्या कर सकता हूं? ऐसा क्यों लगता है कि is_readable का गलत परिणाम है? क्या यह संभव है कि is_readable फ़ाइल मालिक के ईयूआईडी के साथ काम कर रहा है, जबकि getimagesize नहीं है? यही एकमात्र स्पष्टीकरण है जो मुझे समझ में आता है, लेकिन वह ज्ञान भी हल करने में मदद नहीं करता है।
<?php echo is_readable("/stora2/Pics/2009/2009-07-26/DSC00532.JPG") . "\n\n"; ?>
तब मैं वेब सर्वर उपयोगकर्ता के लिए उपयोगकर्ता बंद (इस सर्वर पर वास्तव में www-डेटा) है और यह भाग गया:
@ hek2mgl से प्रेरित होकर मैं इस अति जटिल स्क्रिप्ट, readable.php नाम बनाया। परिणाम
1
तब मैं उसी उपयोगकर्ता के रूप में स्ट्रेस चला गया। ये वे आदेश हैं जिनका मैंने उपयोग किया था। परिणाम एक 70KB + फ़ाइल है, और इसलिए मुझे अपनी संपूर्णता में इसे पोस्ट नहीं दूँगी, तो यह http://pastebin.com/mFqiSBiz
[email protected]:~$ sudo su - www-data
$ ls -l "/stora2/Pics/2009/2009-07-26/DSC00532.JPG"
-rw------- 1 dennis dennis 524288 2012-02-11 08:18 /stora2/Pics/2009/2009-07-26/DSC00532.JPG
$ file "/stora2/Pics/2009/2009-07-26/DSC00532.JPG"
/stora2/Pics/2009/2009-07-26/DSC00532.JPG: writable, regular file, no read permission
$ php /home/dennis/readable.php
1
$ strace php /home/dennis/readable.php > /tmp/strace.out 2>&1
नहीं
यकीन है कि मैं के लिए क्या देख रहा हूँ पर पोस्ट किया जाता है। कृपया सलाह दें।
* "ध्यान रखें कि PHP फ़ाइल को उस उपयोगकर्ता आईडी के रूप में एक्सेस कर रहा है जिस पर वेब सर्वर चलता है (अक्सर 'कोई नहीं') "* – Madbreaks
परिणाम भी कैश किया जा सकता है। कोशिश करें ['clearstatcache()'] (http://php.net/manual/en/function.clearstatcache.php) – Phil
क्या उपयोगकर्ता फ़ाइल का मालिक है और आपका वेब सर्वर किस उपयोगकर्ता के रूप में चल रहा है? –