2011-01-05 21 views
7

मैं यह SELECT LOAD_FILE("/home/user/domains/example.com/public_html/robots.txt") AS tmp FROM tmpTable कर रहा हूं लेकिन यह शून्य लौटाता है। मैं यह कैसे जांच सकता हूं कि ऐसा इसलिए है क्योंकि मुझे FILE विशेषाधिकार नहीं मिला है या यदि यह कुछ और है? MySQL एक त्रुटि नहीं देगा। (मैं PHP का उपयोग कर रहा)MySQL LOAD_FILE वापस लौट रहा है

किसी को भी कि LOAD_FILE साथ अनुभव है, मुझे उस समारोह के बारे में बता :)

<?php 
$result = mysql_query('SELECT LOAD_FILE("/home/user/domains/example.com/public_html/robots.txt") AS tmp FROM tmpTable') or die(mysql_error()); 
while($row = mysql_fetch_assoc($result)) 
{ 
var_dump($row['tmp']); 
} 
+0

पूर्ण कोड आप क्वेरी –

+0

को चलाने के लिए उपयोग कर रहे हैं दिखाने के लिए कृपया यह वह जगह है पूर्ण कोड (परीक्षण कोड) – Simon

+0

आप अनुमति के साथ उपयोगकर्ता प्रदान की गई है? अनुदान फ़ाइल * * * मुझे; –

उत्तर

4

लिनक्स वितरण पर MySQL के कुछ संस्करणों की तरह लग रहा LOAD_FILE समारोह के साथ एक बग है। यहां the thread है। धागे के बहुत अंत में ऐसा लगता है कि एक कामकाज हो सकता है।

संपादित करें:

जब से तुम एक साझा मेजबान पर कर रहे हैं, कार्यक्षमता पर ध्यान देकर आप इसके बजाय आप बस फ़ाइल में पढ़ सकते हैं करना चाहते हैं? file() का उपयोग करके फ़ाइल को सरणी प्रारूप में पढ़ना चाहिए।

5

एक वास्तव में बदसूरत वैकल्पिक हल यहां पाया जा सकता:

http://angkatbahu.blogspot.com.es/2011/03/mysql-loadfile-function-in-ubuntu-it_12.html

आप फ़ाइलों डाल, तो आप में लोड करना चाहते हैं/var/lib/mysql/all_images निर्देशिका है, यह काम करता है!

ubuntu 12.10 में परीक्षण किया गया (और कोई, उपयोगकर्ता mysql करने के लिए फ़ाइलों chomd'ing, काम नहीं किया)

+0

यह उबंटू 12.04 पर मेरे लिए काम किया। धन्यवाद! –

+0

जबकि वर्कअराउंड बदसूरत है, मैंने पाया कि आपको अपनी छवियों को/var/lib/mysql/all_images में रखना नहीं है। मैंने/var/lib/mysql/foo_images का उपयोग किया और यह ठीक काम किया। इसके लिए धन्यवाद, मेरे पास डेटाबेस डेटाबेस स्कीमा इंस्टॉलर (एक डेबियन पैकेज) था/var/lib/mysql/foo_images, इसे छवि फ़ाइलों के साथ भरें, फिर मेरे पोस्टइंस्ट में मैं अपना एसक्यूएल LOAD_FILEs से भरा चलाता हूं और फिर/var/lib/mysql/foo_images। अंतिम परिणाम MySQL स्थापना को गड़बड़ाने के न्यूनतम मौके के साथ पूरी तरह से साफ है, और मध्यवर्ती चरण भी बहुत खराब नहीं थे। मैं संतुष्ट हूँ। –

+1

अन्य निर्देशिका विफल होने का कारण एपर्मर ब्लॉक –

1

क्या विशेषाधिकार आपके पास, show grants का उपयोग करके देखें।

मैं कुछ अतिरिक्त आदेशों आप की जाँच करने के लिए यदि आप की स्थिति यहाँ पूरा उपयोग कर सकते हैं दर्ज किया है:

http://pastebin.com/Dvsdxh9Y

परिशिष्ट मैं प्रलेखन के लिए होगा। सुनिश्चित करें:

  • है मूल निर्देशिका
  • फ़ाइल विशेषाधिकार explicily प्रदान किया जाता है चाहिए पर अनुमति निष्पादित। (। पर GRANT फ़ाइल उपयोगकर्ता @ स्थानीय होस्ट करने के लिए)
  • आप प्लावित है विशेषाधिकार
  • आप लॉग आउट और माता पिता के dir पर में

अनुमति का उदाहरण वापस लॉग इन किया है:

 

mysql> \! ls -ld `dirname /home/jlam/code/projectName/doc/filesForTesting/images/imageTest01.jpg` 
drwxrwxr--. 2 jlam jlam 4096 May 12 14:22 /home/jlam/code/projectName/doc/filesForTesting/images 

mysql> select hex(LOAD_FILE('/home/jlam/code/projectName/doc/filesForTesting/images/image 

Test01.jpg')); 
+-------------------------------------------------------------------------------------------------------------+ 
| hex(LOAD_FILE('/home/jlam/code/projectName/doc/filesForTesting/images/imageTest01.jpg')) | 
+-------------------------------------------------------------------------------------------------------------+ 
| NULL                          | 
+-------------------------------------------------------------------------------------------------------------+ 
1 row in set (0.00 sec) 



mysql> \! chmod o+x /home/jlam/code/projectName/doc/filesForTesting/images 
mysql> \! ls -ld `dirname /home/jlam/code/projectName/doc/filesForTesting/images/imageTest01.jpg` 
drwxrwxr-x. 2 jlam jlam 4096 May 12 14:22 /home/jlam/code/projectName/doc/filesForTesting/images 
mysql> select hex(LOAD_FILE('/home/jlam/code/projectName/doc/filesForTesting/images/imageTest01.jpg')); 
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
| hex(LOAD_FILE('/home/jlam/code/projectName/doc/filesForTesting/images/imageTest01.jpg'))                                 
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
| FFD8FFE1001845786966000049492A00080000000000000000000000FFEC00114475636B7900010004000000500000FFE10407687474703A2F2F6E732E61646F62652E636F6D2F7861702F312E302F003C3F787061636B657420626567696E3D22EFBBBF222069643D2257354D304D7043656869487 
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 

उपयोगकर्ता विशेषाधिकारों का उदाहरण:

 

16:38:09 (getImages) ~/code/projectName/doc/filesForTesting/images$ mysql -u eventCal -p eventCal 
Enter password: 

mysql> show grants; 
+-----------------------------------------------------------------------------------------------------------------+ 
| Grants for [email protected]                     | 
+-----------------------------------------------------------------------------------------------------------------+ 
| GRANT USAGE ON *.* TO 'eventCal'@'localhost' IDENTIFIED BY PASSWORD '*xxxxx' | 
| GRANT ALL PRIVILEGES ON `tmp`.* TO 'eventCal'@'localhost'              | 
| GRANT ALL PRIVILEGES ON `eventCalTesting`.* TO 'eventCal'@'localhost'           | 
| GRANT ALL PRIVILEGES ON `eventCal`.* TO 'eventCal'@'localhost'             | 
| GRANT ALL PRIVILEGES ON `eventCal_categoryMigration`.* TO 'eventCal'@'localhost'        | 
+-----------------------------------------------------------------------------------------------------------------+ 
5 rows in set (0.00 sec) 

mysql> select hex(LOAD_FILE('/home/jlam/code/projectName/doc/filesForTesting/images/imageTest01.jpg')); 
+-------------------------------------------------------------------------------------------------------------+ 
| hex(LOAD_FILE('/home/jlam/code/projectName/doc/filesForTesting/images/imageTest01.jpg')) | 
+-------------------------------------------------------------------------------------------------------------+ 
| NULL                          | 
+-------------------------------------------------------------------------------------------------------------+ 
1 row in set (0.00 sec) 

ओथ में एर जड़ सत्र:

 

mysql> grant file ON *.* to [email protected]; 
Query OK, 0 rows affected (0.00 sec) 

mysql> flush privileges; 
Query OK, 0 rows affected (0.00 sec) 

उपयोगकर्ता सत्र में वापस, मैं अभी भी फ़ाइल

 

mysql> select hex(LOAD_FILE('/home/jlam/code/projectName/doc/filesForTesting/images/imageTest01.jpg')); 
+-------------------------------------------------------------------------------------------------------------+ 
| hex(LOAD_FILE('/home/jlam/code/projectName/doc/filesForTesting/images/imageTest01.jpg')) | 
+-------------------------------------------------------------------------------------------------------------+ 
| NULL                          | 
+-------------------------------------------------------------------------------------------------------------+ 
1 row in set (0.00 sec) 

लोड नहीं कर सकता .....लेकिन अगर मैं बाहर लॉग इन करें और में वापस:

 

mysql> exit 
Bye 

16:40:14 (getImages) ~/code/projectName/doc/filesForTesting/images$ mysql -u eventCal -p eventCal 
Enter password: 

mysql> select hex(LOAD_FILE('/home/jlam/code/projectName/doc/filesForTesting/images/imageTest01.jpg')); 
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
| hex(LOAD_FILE('/home/jlam/code/projectName/doc/filesForTesting/images/imageTest01.jpg'))                                 
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
| FFD8FFE1001845786966000049492A00080000000000000000000000FFEC00114475636B7900010004000000500000FFE10407687474703A2F2F6E732E61646F62652E636F6D2F7861702F312E302F003C3F787061636B657420626567696E3D22EFBBBF222069643D2257354D304D7043656869487 
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 

+1

इसके अतिरिक्त, उबंटू लिनक्स और अन्य स्थानों पर, एपर्मर हस्तक्षेप कर सकता है। –

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