"Вызов программы php или curl для запуска PHP-скриптов:
1. php5.2 ~/папка_со_скриптом/файл_скрипта.php > /dev/null (для PHP 5.2)
2. php5.3 ~/папка_со_скриптом/файл_скрипта.php > /dev/null (для PHP 5.3)
3. php5.4 ~/папка_со_скриптом/файл_скрипта.php > /dev/null (для PHP 5.4)
4. curl -s 'http://ваш-домен.ru/папка_со_скриптом/файл_скрипта.php' > /dev/null"
При выполнении по первым двум вариантам запуска вылазит ошибка
php5.3 ~/domains/xn----7sbh3afrl9d.xn--p1ai/EJ/xml.php <html><body><p>Archive extraction failed, code: 11</p></body></html>
При выполнении по последнему варианту, ошибок нет, но база не обновляется.
Подскажите, что можно сделать, может что в скрипте поправить (я в php не сильна), чтобы автоматизировать процесс обновления, ведь через адресную строку в браузере все работает, какой механизм тогда используется там. очень надоело руками обновлять.
Привожу код своего скрипта:
<?php
include 'ejconn.inc';
set_time_limit(0);
$z_file = 'xml.zip';
$x_main_file = '0.xml';
$err_msg = '';
$s1 = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<source>\n";
$s2 = "\n</source>";
// Очистим текущий каталог от xml-файлов.
if ($handle = opendir("./"))
{
while (false !== ($file = readdir($handle)))
{
if (strtolower(substr($file, strlen($file)-4, 4))==".xml")
{
unlink("./$file");
}
}
closedir($handle);
}
// Разархивируем xml-файлы и загрузим их содержимое в базу данных.
$zip = new ZipArchive;
$res = $zip->open("./$z_file");
if ($res === TRUE)
{
$zip->extractTo("./");
$zip->close();
if (EJDB::connect_db())
{
$err_msg = "Error connect DB";
}
else
{
$q = "CREATE TABLE IF NOT EXISTS Students (
StuId bigint(20) NOT NULL auto_increment,
StuPID varchar(20) default NULL,
StuPassword varchar(40) default NULL,
StuEnabled tinyint(1) NOT NULL default '1',
StuTimeCode int(11) default NULL,
StuDeleted tinyint(1) NOT NULL default '0',
PRIMARY KEY (StuId),
UNIQUE KEY StuPID (StuPID)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;";
$res = EJDB::$Conn->query($q);
$q = "CREATE TABLE IF NOT EXISTS StudentsData (
DatId bigint(20) NOT NULL auto_increment,
DatStudentId bigint(20) default NULL,
DatParam1 varchar(20) default NULL,
DatParam2 varchar(20) default NULL,
DatParam3 varchar(20) default NULL,
DatParam4 varchar(20) default NULL,
DatData longtext,
PRIMARY KEY (DatId),
KEY DatStudentId (DatStudentId),
KEY DatParam1 (DatParam1),
KEY DatParam2 (DatParam2),
KEY DatParam3 (DatParam3),
KEY DatParam4 (DatParam4)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;";
$res = EJDB::$Conn->query($q);
$time_code = time();
$x = simplexml_load_file("./$x_main_file");
$stmt_u_stu = EJDB::$Conn->prepare("UPDATE Students SET StuPassword=?, StuTimeCode=?, StuDeleted=0 WHERE StuPID=?");
$stmt_u_stu->bind_param("sis", $StuPassword, $time_code, $StuPID);
$stmt_i_stu = EJDB::$Conn->prepare("INSERT INTO Students (StuPID, StuPassword, StuTimeCode) VALUES (?, ?, ?)");
$stmt_i_stu->bind_param("ssi", $StuPID, $StuPassword, $time_code);
$x_stu_list = $x->student_list;
foreach ($x_stu_list->student as $xs)
{
$StuPID = $xs['id'];
if ($StuPID!='')
{
$StuPassword = $xs['md5password'];
$stmt_u_stu->execute();
if (EJDB::$Conn->affected_rows==0)
$stmt_i_stu->execute();
}
}
$stmt_u_stu->close();
$stmt_i_stu->close();
// Пометим на удаление записи учащихся, которые не были затронуты при парсинге головного XML-файла,
// т.к. это означает, что эти учащиеся больше не в списке школы.
$stmt_u_stu = EJDB::$Conn->prepare("UPDATE Students SET StuDeleted=1 WHERE StuTimeCode<>?");
$stmt_u_stu->bind_param("i", $time_code);
$stmt_u_stu->execute();
$stmt_u_stu->close();
$x = null;
if ($handle = opendir("./"))
{
while (false !== ($file = readdir($handle)))
{
if (strtolower(substr($file, strlen($file)-4, 4))==".xml")
{
$x = simplexml_load_file(".$x_dir/$file");
$stmt_d = EJDB::$Conn->prepare("DELETE FROM StudentsData WHERE DatStudentId=? AND DatParam1=?");
$stmt_d->bind_param("is", $DatStudentId, $DatParam1);
$stmt_d_book = EJDB::$Conn->prepare("DELETE FROM StudentsData WHERE DatStudentId=? AND DatParam1=? AND DatParam2=? AND DatParam3=?");
$stmt_d_book->bind_param("isss", $DatStudentId, $DatParam1, $DatParam2, $DatParam3);
$stmt_i = EJDB::$Conn->prepare("INSERT INTO StudentsData (DatStudentId, DatParam1, DatData) VALUES (?, ?, ?)");
$stmt_i->bind_param("iss", $DatStudentId, $DatParam1, $DatData);
$stmt_i_book = EJDB::$Conn->prepare("INSERT INTO StudentsData (DatStudentId, DatParam1, DatParam2, DatParam3, DatData) VALUES (?, ?, ?, ?, ?)");
$stmt_i_book->bind_param("issss", $DatStudentId, $DatParam1, $DatParam2, $DatParam3, $DatData);
foreach ($x->student as $xs)
{
$StuPID = $xs['id'];
$stmt_s_stu = EJDB::$Conn->prepare("SELECT StuId FROM Students WHERE StuPID=?");
$stmt_s_stu->bind_param("s", $StuPID);
$stmt_s_stu->bind_result($StuId);
$res = $stmt_s_stu->execute();
if ($stmt_s_stu->fetch())
{
$DatStudentId = $StuId;
$stmt_s_stu->close();
foreach ($xs->data as $d)
{
$DatParam1 = $d['type'];
$DatData = $s1 . $d->asXML() . $s2;
if ($d['type']=='book')
{
$DatParam2 = $d['begin_date'];
$DatParam3 = $d['end_date'];
$res = $stmt_d_book->execute();
$res = $stmt_i_book->execute();
}
else
{
$res = $stmt_d->execute();
$res = $stmt_i->execute();
}
}
}
}
$stmt_d->close();
$stmt_d_book->close();
$stmt_i->close();
$stmt_i_book->close();
$x = null;
}
}
}
closedir($handle);
EJDB::disconnect_db();
}
}
else
{
$err_msg = "Archive extraction failed, code: $res";
}
echo '<html>';
echo '<body>';
if ($err_msg)
{
echo "<p>$err_msg</p>";
}
else
{
echo "<p>XML-files extracted successfully</p>";
}
echo '</body>';
echo '</html>';
?>