|
Posted by The Natural Philosopher on 09/04/07 11:13
Jerry Stuckle wrote:
> The Natural Philosopher wrote:
>> The Natural Philosopher wrote:
>>> This is so weird.
>>>
>>> What I am trying to do is to upload files and stuff them in a mysql
>>> database.
>>>
>>> Everything works except the file content is zero.
>>>
>>> using the load_file command from mysql command line as 'root' works
>>> and i can download the inserted file ok.
>>>
>>> using the load_file command from mysql as 'web-user' (my default web
>>> user?) didn't work until I gave that user every permission I could
>>> find, and *restarted mysqld*. (why? *shrug*)
>>>
>>> using the load_file command from php/Mysql to load the temporary
>>> files fails miserably all the time. Not one success. Everything else
>>> is fine..I get the name and the size coming through,and I've
>>> 'echo'ed the command string that goes to mysql_query() and tried it
>>> in the command line stuff, and that works provided I give it a file
>>> that actually exists.
>>>
>>>
>>> If the file does NOT exist then I get no error, just no data..
>>>
>>> So that is a possibility..
>>>
>>> Ah. I copied the temporary file to somewhere else (/tmp/foo), and
>>> then handed it to MySQL..THAT WORKED..
>>>
>>> So it's something about how the temporary file is - or isn't - being
>>> written to disk maybe.
>>>
>>> Is there a way to force a close on the file..maybe that's the problem
>>> Mysql is opening a file that is not flushed to disk maybe?
>>>
>> Mmm I tried move_uploaded_file() and THAT didn't work either.
>>
>> Something is badly broken/misconfigured in PHP I think.
>> I gew the feeling its maintaining its own picture of file objects, and
>> doesn't actually flush to the disk unless you do a copy or close php..
>
> No, PHP doesn't maintain it's own copy. However, it's possible the OS
> hasn't flushed a file to disk. Unlikely, though.
>
> This sounds very much like a permissions problem - does MySQL have read
> access to the directory the file is in, also?
>
> Of course, with no code, everything's a guess...
>
// Yawn bugger, Files. File data should be stored in the $_FILES[]
array, so let's start with the the new ones..
for ($i=0;$i<10;$i++)
{
$index="new_file".$i;
$filename= $_FILES[$index]["name"]; //orig filename
$filesize= $_FILES[$index]["size"]; // the size in bytes of the
uploaded file
$tmpname=$_FILES[$index]["tmp_name"]; // the name of the temporary
copy of the file stored on the server
$index="new_description".$i; // where new file decscriptors are stored
$filedescription=$_POST[$index];
copy($tmpname,"/tmp/foo"); //otherwise you get a null content
if ($filename=="" || $filesize==0) // skip emptiness.
continue;
// one supposes one has a file at this point..massage the name
into just the filename without the slashes
$filename=basename($filename);
$query=sprintf("insert into project_files set
project_id='%s',current='yes', date='%s' ,user='%d', size='%d',
description='%s', name='%s', content=LOAD_FILE('%s') ",
$project_id,
date('Y-m-d'),
$employee_id,
$filesize,
$filedescription,
$filename,
"/tmp/foo");
mysql_query($query);
}
}
[Back to original message]
|