Вам нужно сделать что-то вроде этого:
exec('php /var/www/web/shop_xml/index.php "'.escapeshellarg($row['SKID']).'" "1" > /dev/null 2>&1 &');
Затем в вашем index.php
скрипте:
<?php
$shopKeeper = $argv[1];
$shop = $argv[2];
// ... do stuff
То, что вы пытались сделать, это использовать строку HTTP-запросав файловой системе вызвать, который не будет работать.Вам необходимо передать данные в качестве аргументов командной строки, как в терминале.Затем вы можете получить данные из $argv
.
. Вам нужно запустить команду с php
, иначе ядро (скорее всего, если вы не добавите хэш-банг и не установите разрешения) не будет знать, как выполнитьсценария или у вас есть права на это.
Если вы добавите > /dev/null 2>&1 &
, команды будут выполняться асинхронно, то есть вам не придется ждать завершения последней команды, прежде чем вы сможете вызвать другую.Будьте осторожны с этим, однако, вы можете получить много процессов, если ваш запрос возвращает много строк.
Чтобы избежать этого, вы можете сделать что-то вроде:
<?php
// Number of records to process at a time
$perBatch = 5;
set_time_limit(0);
//connect to database
$msSqlDB = new mySqlConnect('Freewebstore');
// Get the number of records in the table
$query = "SELECT count(*) FROM FacebookStores";
$result = mysql_fetch_row(mysql_query($select));
$count = $result[0];
for ($i = 0; $i < $count; $i += $perBatch) {
// Get $perBatch records from the DB
$query = "SELECT * FROM FacebookStores LIMIT $i,$perBatch";
$result = mysql_query($select);
for ($j = 1; $row = mysql_fetch_array($result); $j++) {
// Base command
$command = 'php /var/www/web/shop_xml/index.php "'.escapeshellarg($row['SKID']).'" "1"';
// Run all except the last asynchronously
if ($j < $perBatch) {
$command .= ' > /dev/null 2>&1 &';
}
exec($command);
}
}
Это получит $perBatch
Записывает данные из БД одновременно и обрабатывает все, кроме последнего, асинхронно.Это приведет к тому, что они будут обрабатывать примерно $perBatch
записей за один раз, и поможет избежать большого количества процессов, потребляющих ресурсы сервера.
В качестве дополнительного примечания вы, кажется, используете нечетное сочетание OOКод БД и процедурный код БД - вам следует придерживаться одного или другого, чтобы избежать путаницы.