Загрузка данных в БД из текстового файла

MpakFromMoscow

Новичок
Прошу помочь
PHP:
exec("mysqldump --user=root --password=".$sPasswd." --add-drop-table -l -e --delayed-insert ".$sDbase." cm_cat cm_cat_tree cm_goods cm_model cm_photo_list cm_properties cm_tech cm_tech_value > ".$sqlpath.".sql");
выполняет - создается дамп
PHP:
exec("mysql -f --password=".$sPasswd." ".$sDbase."  < ".$sqlpath.".sql");
- не выполняет. ваще реакция ноль

Делаю так:
PHP:
exec("mysql",$aOutput,$iValueCod);
print "<pre>";
print $iValueCod."<br>\n";
print_r ($aOutput);
Вывод:
1

Array
(
)
когда неправильно оформляю mysqldump например:
PHP:
exec("mysqldump",$aOutput,$iValueCod);
print "<pre>";
print $iValueCod."<br>\n";
print_r ($aOutput);
то на вывод выходит стандартный help по той функции.
Складывается впечатление что exec не может почему то задействовать mysql.
Кстати из командной строки mysql работает нормально.
Подскажите плиз че там не так?
 

MpakFromMoscow

Новичок
да. 100% правильный. он от корня идет.
делал вывод на экран строки команды перд тем как выполнить exec (), так вот сам exec() не выполняется а копирование вывода в коммандную строку сервера срабатывает. ввод файла в бд происходит.
 

Фанат

oncle terrible
Команда форума
попробуй вместо экзека сделать backtick - на него там ссылка есть
и посмотри, что тебе выведет
может, ошибку какую скажет
 

MpakFromMoscow

Новичок
т.е. написать
PHP:
backtick("mysql",$aOutput,$iValueCod);
?
я просто немного не врубился. не знаю такой команды
 

booter

Новичок
Мабуть просто прав запуска mysqldump-а нету. Может вам кинуть процедурку, которая сама этот дамп делает без использования mysqldump-а? или в phpmyadmin-е подглядите.
 

MpakFromMoscow

Новичок
да нет! mysqldump работает! а вот просто mysql exec() не запускает - типа не знает такой команды и все.
проверил ради приличия на rndc, так вот команд неймсервера exec() тоже не знает.
backtick() хе-хе... ну типа попытался мне ответеили что нет такой функции. Прошу поподробнее про это.

-~{}~ 11.10.05 21:40:

вывод после backtick (так бы и сказал что кавычки обратные поставить :) )
`mysql -f --password=mypasswd mydb< /usr/home/webstyle/www/mysite/admin/backup/db.backup_climon.sql`

1

Array
(
)
типа х... вам... не прошло...

-~{}~ 11.10.05 21:57:

версии php mysql и freebsd говорить?
 

booter

Новичок
попробуй не exec(), а system(). Кстати, а что мешает поднять дамп средствами PHP, разбить по запросам и скормить базе?
 

MpakFromMoscow

Новичок
долго... базы товаров на сотни тысяч товаров долго туда сюда гонять даже таким макаром а если в скрипте ещё его обрабатывать ваще морока. (на мой взгляд) Этож просто создания бэкапа базы товаров на всяк пожарный а не работа с базой. хотелось как проще :))

-~{}~ 11.10.05 22:15:

PHP:
$aOutput = system($sCommand,$iValueCod);
print "<pre>";
print $iValueCod."<br>\n";
print_r ($aOutput);
вывод:
`mysql -f --password=passwd base < /usr/home/webstyle/www/mysite/admin/backup/db.backup_climon.sql`

1

посмотрел в базе - нифига не залилось....
 

booter

Новичок
попробуй
cat /usr/home/webstyle/www/mysite/admin/backup/db.backup_climon.sql | /usr.../mysql -f --password=passwd base
 

booter

Новичок
Тогда совсем в лоб - сделай su имя_пользователя_от_которого_запускается_апач -c '/usr/local/bin/mysql'

Если запустится - очень странно.
 

MpakFromMoscow

Новичок
а кули толку? у mysql для всех одинаковые парамтеры
-r-xr-xr-x 1 root wheel 57016 Mar 31 2004 mysql
но поробовать можно тока плиз напиши точно как писать
например exec("su www -c '/usr/local/bin/mysql'"); - так? все кавычки как надо стоят?
 

booter

Новичок
Вроде так. Еще были мысли, что перепрыгивает за допустимый объем памяти, но PHP не делает это молча, хотя возможно, что порождаемый процесс он не контролирует, а просто рубит и все.
 

MpakFromMoscow

Новичок
ответ:
команда: su www -c '/usr/local/bin/mysql'
1
Array
(
[0] => This account is currently not available.
)
ответ2:
команда: sudo su www -c '/usr/local/bin/mysql'
1
Array
(
)

-~{}~ 11.10.05 23:52:

ну там сейчас нет большого объема - всего сотня записей. не больше. в окмендной строке за секунду бекап заливается. так что не думаю что это тот случай.
 

Steamroller

Новичок
MpakFromMoscow, я обратил внимание, у тебя для mysqldump в параметрах вызова указан пользователь root, а для mysql - не указан. Может это ему не нравится?
 

MpakFromMoscow

Новичок
неа. если ему хоть что нтиь не понравилось бы то он бы мне выдал ошибку авторизации как это происходит в командной строке если там чтото не так.

Я говорю - через exec() не запускается команда mysql (и rndc тоже, так, для галочки) вопрос почему? и второй вопрос, как сделать что б запускалась.

-~{}~ 12.10.05 00:20:

safe_mode не стоит
PHP Version 4.3.11
Apache 2.0 20020903
mysql 3.23.49
FreeBSD 5.3-RELEASE-p5
 

Steamroller

Новичок
неа. если ему хоть что нтиь не понравилось бы то он бы мне выдал ошибку авторизации как это происходит в командной строке если там чтото не так.
Куда бы выдал?
Ты же пытаешься смотреть что выдается в STDOUT, а ошибки авторизации клиентские программы mysql выдают на STDERR.
 

MpakFromMoscow

Новичок
exec("mysql",$aOutput,$iValueCod);
поидее все он должен выдать в $aOutput так и происходит с mysqldump если я там например пароль не ставлю.
А тут ничего.
а как отлавливается STDERR?
 
Сверху