I have quite an extensive PHP script that I have to run on my database as well as gather img sizes from the file structure and write that information to an XML file. I have tried running directly from the web browser with minimum success as the Gateway times out after about 3 minutes. I have tries running from an ssh shell as well with no success. here is most of the script
//Get all galleries from client
$query = mysql_query("SELECT *
FROM gallery
WHERE clientRef BETWEEN 420
AND 430
ORDER BY clientRef
");
while ($row = mysql_fetch_array($query)) {
//set gallery id
$galleryID = $row['id'];
$clientRef = $row['clientRef'];
//Check image sizes and set horizontal vs vertical
$fImageSizeName = mysql_fetch_array($qAlbumImages);
$imageSizeName = $fImageSizeName['OrgImageName'];
$galleryPath = $_SERVER['DOCUMENT_ROOT'] . "/data/gallery/" . $galleryID . "/images/";
if(is_dir($galleryPath)) {
list($width, $height) = getimagesize($_SERVER['DOCUMENT_ROOT'] . "/data/gallery/" . $galleryID . "/images/album/" . $imageSizeName);
header("Content-Type: text/plain");
//Create the xml document
$xmlDoc = new DOMDocument();
//Create the root Element
$root = $xmlDoc->appendChild(
$xmlDoc->createElement("PageflipDataSet"));
//Create settings element
$settings = $root->appendChild(
$xmlDoc->createElement("Settings"));
//Create PageOrder Node
$PageOrder = $root->appendChild(
$xmlDoc->createElement("PageOrder"));
$qAlbumImages = mysql_query(" SELECT *
FROM galleryimage
WHERE galleryId='{$galleryID}'
AND clientRef= '{$clientRef}'
ORDER BY sort
");
while ($fAlbumImages = mysql_fetch_array($qAlbumImages)) {
$path = "../../../../data/gallery/" . $galleryID . "/images/album/" . $fAlbumImages['OrgImageName'];
//Create the PageData Node
$PageData = $PageOrder->appendChild(
$xmlDoc->createElement("PageData"));
//PageFile attribute
$PageData->appendChild(
$xmlDoc->createAttribute("PageFile"))->appendChild(
$xmlDoc->createTextNode($path));
}//close while
//Format output so it looks pretty
$xmlDoc->formatOutput = true;
//Save and create path to gallery ID
$galleryPath = $_SERVER['DOCUMENT_ROOT'] . "/data/gallery/" . $galleryID;
//Set path
if(is_dir($galleryPath)) {
$xmlPath = $_SERVER['DOCUMENT_ROOT'] . '/data/gallery/' . $galleryID . '/xml/pageflipdata.xml';
$xmlDoc->save($xmlPath);
}
}//close while
Any suggestions on how I should go about doing this. There are about 2000 clientRef and each of the clientRef have 5-10 albums which can contain 15-30 images.
If timeout is the primary issue, you could just do it in smaller chunks and combine the xml later manually.
If this needs to run regularly, you can use a similar process but run each ‘smaller chunk’ in a different request using ajax or something to wait for confirmation from all the small chunk scripts to run an xml combination script.
Of course simply increasing the max_execution_time of PHP would be easier. If you don’t have access to this, you might be able to tweak something into working order by monitoring execution time and then calling set-time-limit to reset the timer again. I’ve never tried this, though, so just an idea.