2009-05-22 2 views
1

У меня есть файл PHP, который выполняет несколько sql-скриптов. Я нахожу, что первые два скрипта исполняются, но последние два никогда не завершаются. Я тестировал два последних сценария отдельно в своих PHP-файлах и скриптах, поэтому мне интересно, связано ли это с количеством вызовов exec(), которые я создаю в своем PHP-скрипте. Какие-либо предложения? Вот оригинальный сценарий:Newbie Question-- вызов нескольких скриптов .sql в файл PHP

<?php 
session_start(); 

$host = "localhost"; 
$user = "user"; 
$pass = "pass"; 
$database = "database"; 

$linkID = mysql_connect($host, $user, $pass) or die("Could not connect to host."); 
mysql_select_db($database, $linkID) or die("Could not find database."); 


$query = sprintf("SELECT dbName FROM users where userName='%s'", 
    $_SESSION['MM_Username']); 
$resultID = mysql_query($query) or die("Data not found."); 

list($dbName)= mysql_fetch_row($resultID); 

exec("mysql -u user -ppassword ".$dbName." < ../scripts/makeTblFinalAnalysis.sql"); 
exec("mysql -u user -ppassword ".$dbName." < ../scripts/tblFinalDetailed.sql"); 
exec("mysql -u user -ppassword ".$dbName." < ../scripts/TblGridViews.sql"); 
exec("mysql -u user -ppassword ".$dbName." < ../scripts/makeTblGeo.sql"); 
header('Location: dashboards/dashboard.html') ; 
exit; 
?> 

ответ

3

Возможно, у вас закончилось время выполнения? Как долго запускаются скрипты?

Ищите set_time_limit() в документации по PHP; если им потребуется некоторое время для запуска, вы захотите увеличить тайм-аут выполнения PHP.

+0

Сброс памяти по умолчанию max_execution_time составляет около 60 секунд. Так что, если ваши сценарии занимают больше времени, чем то, что может быть проблемой – bumperbox

+0

Хорошо, я добавил set_time_limit, и он все еще не работает. Мои скрипты работали до 30 секунд, хотя – 2009-05-22 15:05:25

1

«но последние два, похоже, не завершены». возможно, из-за некоторых замков в первых двух сценариях, третий скрипт зашел в тупик? вы можете попытаться выполнить эти скрипты на всех четырех из них на своем сервере sql, чтобы проверить, успешно ли он выполняется и какие изменения выполняются. Также может потребоваться публикация запросов sql.

0

Попробуйте присоединиться ко всем execs в сценарий оболочки и запустить его. Затем попробуйте запустить его в фоновом режиме. Но тогда PHP не будет ждать возврата скрипта.

exec("nohup sqlRoutines.sh > /dev/null 2>&1 &"); 

это отключит скрипт вызывающего процесса и не перенаправить стандартный вывод и стандартный поток ошибок в никуда (или LOGFILE, если вы хотите ...).

+0

Я бы хотел попробовать. Извините, но я не очень хорошо разбираюсь в сценариях оболочки. Какая команда должна была выполнить 4 команды exec в сценарии оболочки? – 2009-05-22 15:06:54