Это не совсем по Apache, но дело в том, что я уже полностью лишившись
надежды, допускаю, что это может и его вина.
У меня очень странная ситуация.
Есть один срипт import.cgi, который запизивает данные в базу данных mysql
с помощью LOAD DATA INFILE.
Есть другой, который делает тоже самое, ноне проводит предварительной
подготовки файлов с данными, а пользуется тем, что придоговил import.cgi.
Зовут ЭТОТ срипт: aimport.cgi
Import.cgi получает zip файл через http upload, распаковывает его в
директорию,
и для каждого .dat файла прогоняет функцию импорта с LOAD DATA INFIL. - без
проблем.
КОгда же запускаем aimport.cgi с той же cgi диреткории, чтобы он просто
повотрил
импорт тех распакованных файлов - хрен - вываливается с :
Can't get stat of '/hosts/ubex.ru/admin/curi/rates.dat' (Errorcode: 13)
Права и владельцы, ПО:
hosts, server, curi - mode 750, owner: ubex, group: ubex
rates.dat - 666, owner: ubex, group: ubex
apache is run as: root with suEXEC (so, all scripts execute as ubex.ubex)
mysql is run as : mysql.mysql
database, db user db password are the same for both scripts (read from the
same config file)
apache: 1.3.9
mysql: 3.23.24
OS: FreeBSD 4.1.1-stable
Я решил, что что-то не так с правами или effective/real uid/gid. Вывел эту
информацию
прямо перед выполнением запроса:
import.cgi:
Real user id: 5012 Real group id: 5012 5012 5012
Eff user id : 5012 Eff group id:5012 5012 5012
/hosts/ubex.ru/admin/curi/rates.dat
134407,1064442,33206,1,5012,5012,0,0,970932306,970932306,970935971,8192,0
amport.cgi
Real user id: 5012 Real group id: 5012 5012 5012
Eff user id : 5012 Eff group id:5012 5012 5012
/hosts/ubex.ru/admin/curi/rates.dat
134407,1064442,33206,1,5012,5012,0,0,970935971,970932306,970935971,8192,0
Для файлов выдается массив stat($file):
33206= mode 100666
5012 - uid of ubex
5012 - gid of ubex
Функция импорта простая до нельзя:
# import one table from a file
sub import_table {
my $myname="import_table";
my $sql;
my $sth;
my $table=$_[0];
my $a=0;
# debug data
warn "Real user id: $< Real group id: $(\n";
warn "Eff user id : $> Eff group id:$)\n";
$f=$CONFIG{'CURDIR'}.'/'.$table.'.dat';
@aa=stat($f);$"=',';warn "$f @aa\n";
$sql="LOAD DATA INFILE \'$CONFIG{'CURDIR'}/".$table.".dat\' REPLACE
INTO TABLE $table";
unless ($sth=$dbh->prepare($sql)){die "$DBI::errstr,$myname\n";}
unless ($a=$sth->execute()){die "$DBI::errstr,$myname\n";}
$a=$sth->rows;
$sth->finish;
if ($a>0){warn " $a record(s) in $table\n";}
return $a;
}
Я уже ничего не понимаю. Или это должно работать в обоих сриптах или вообще
не должно. Ведь
условия перед LOAD DATA INFILE одни и те же.
Есть мысли?
Артем
=============================================================================
= Apache-Talk@xxxxxxxxxxxxx mailing list =
Mail "unsubscribe apache-talk" to majordomo@xxxxxxxxxxxxx if you want to quit.
= Archive avaliable at http://www.lexa.ru/apache-talk =
"Russian Apache" includes software developed
by the Apache Group for use in the Apache HTTP server project
(http://www.apache.org/) See
Apache LICENSE.
Copyright (C) 1995-2001 The Apache Group. All rights reserved.
Copyright (C) 1996 Dm. Kryukov; Copyright (C)
1997-2009 Alex Tutubalin. Design (C) 1998 Max Smolev.