Demonical Monk napisał(a)
W przypadku każdego zabicia przez "siłę wyższą", zostanie dołączony do zawartości strony komunikat PHP. Wygląda to tak jakby robiło readFile() na jakimś pliku struktury binarnej, a potem zamykało skrypt samodzielnie.
No problem pojawia się przy operowaniu przez dłuższy czas na plikach tekstowych. (chociaż przykład dam na obrazkach ;P)
Co do komunikatu dlaczego zabity to nie pojawia się nic w formie 'ludzkiej'. Skrypt radośnie drukuje sobie '.' i nagle komunikat ten co wyżej.
Przykład kodu (zmienne mogą troszkę dziwnie chodzić ale to wycinek całego skryptu (coś ala jedna 'ścieżka' działania która wywołuje błąd):
<?PHP
$userInfo = Array('User'=>'USER','Pass'=>'PASS');
$soapClient = new SoapClient('URL?WSDL',array('soap_version' => SOAP_1_2,'encoding' => 'UTF-8'));
function zbierzZdjecie($id = '')
{
global $userInfo;
if (empty($id)) return Array();
try
{
$params = $userInfo + Array('Zdjecie' => $id);
$result = $soapClient->WezZdjecie($params);
if (isset($result->WezZdjecieResult) && isset($result->WezZdjecieResult->PZdjecie))
{
if (!is_array($result->WezZdjecieResult->PZdjecie))
{
$result = Array(Array('URL'=>$result->WezZdjecieResult->PZdjecie->URL,'dodano'=>$result->WezZdjecieResult->PZdjecie->addDate));
} else
{
$tResult = Array();
foreach($result->WezZdjecieResult->PZdjecie as $picture)
{
if (isset($picture->URL) && isset($picture->addDate))
$tResult[] = Array('URL'=>$picture->URL,'dodano'=>$picture->addDate);
}
$result=$tResult;
}
} else return Array();
} catch (Exception $e)
{
die('Błąd pobierania zdjec.');
}
return $result;
}
function znajdzZdjecia()
{
echo("\nPhotos:");
$errorCounter = 0;$cntItems = 0;
$listaZdjec = Array('photo1','photo2','zdjecie1','zdjecie2','2','4'); //tutaj tak dalej do powiedzmy 10000
foreach($listaZdjec as $zdjecie)
{
if(!file_exists('zdjecia/'.$zdjecie.'.jpg'))
{
$cntItems++;
$infoPhoto = zbierzZdjecie($zdjecie);
for($i=0;$i<count($infoPhoto);$i++)
{
switch($i)
{
case 0:
if (!downloadPhoto($zdjecie,$infoPhoto[$i]['URL']))
$errorCounter++;
break;
case 1:
if (!downloadPhoto($zdjecie.'a',$infoPhoto[$i]['URL'],true))
$errorCounter++;
break;
case 2:
if (!downloadPhoto($zdjecie.'b',$infoPhoto[$i]['URL'],true))
$errorCounter++;
break;
case 3:
if (!downloadPhoto($zdjecie.'c',$infoPhoto[$i]['URL'],true))
$errorCounter++;
break;
case 4:
if (!downloadPhoto($zdjecie.'d',$infoPhoto[$i]['path'],true))
$errorCounter++;
break;
case 5:
if (!downloadPhoto($zdjecie.'e',$infoPhoto[$i]['path'],true))
$errorCounter++;
break;
}
}
echo('.');
unset($infoPhoto);
if ($errorCounter > 50)
{
echo('ERROR: Ponad 50 razy nie udało się zapisać danych na dysku lokalnym !!!<br/>');
die('ERROR: Skrypt został zatrzymany !!!');
}
}
set_time_limit(30); // uncomment in final version
echo(".");flush();
}
return $cntItems;
}
function downloadPhoto($zdjecie,$url,$additional=false)
{
$imageBuffer = '';
if (empty($zdjecie)) return false;
$plikRead = @fopen('URL_DO_STRONY/'.$url,'r');
if (!$plikRead)
{
echo('ERROR: Nie mozna pobrac pliku '.$zdjecie.' - '.$url.'<br/>');
return false;
}
$plikWrite = @fopen('zdjecia/'.$zdjecie.'.jpg','w');
if (!$plikWrite)
{
echo('ERROR: Nie można zapisać pliku na lokalnym serwerze. <br/>');
fclose($plikRead);
return false;
}
while (!feof($plikRead))
{
fwrite($plikWrite,fread($plikRead, 4096));
}
fclose($plikRead);
fclose($plikWrite);
if (!miniaturka('zdjecia/'.$productID.'.jpg',$additional))
return false;
return true;
}
function miniaturka($photoPATH,$additional=false)
{
$thumbName = substr($photoPATH,0,strrpos($photoPATH,'.'));
$im = @imagecreatefromjpeg($photoPATH);
if (!$im)
{
echo('ERROR: Unable to open image: '.$photoPATH);
return false;
}
$x=imagesx($im);$y=imagesy($im);
if ($additional==false)
{
//ROBIMY GIFA
$dy = round((150*$y)/$x);
$tIm = @imagecreatetruecolor(150,$dy);
if (!$tIm)
{
echo('ERROR: Unable to create thumbnail.');
imagedestroy($im);
return false;
}
imagecopyresampled($tIm,$im,0,0,0,0,150,$dy,$x,$y);
imagegif ($tIm, $thumbName.'.gif' );
imagedestroy($tIm);
//ROBIMY PNG
$dy = round((83*$y)/$x);
$tIm = @imagecreatetruecolor(83,$dy);
if (!$tIm)
{
echo('ERROR: Unable to create thumbnail.');
imagedestroy($im);
return false;
}
imagecopyresampled($tIm,$im,0,0,0,0,83,$dy,$x,$y);
imagepng ($tIm, $thumbName.'.png' );
imagedestroy($tIm);
} else
{
//ROBIMY PNG
$dy = round((40*$y)/$x);
$tIm = @imagecreatetruecolor(40,$dy);
if (!$tIm)
{
echo('ERROR: Unable to create thumbnail.');
imagedestroy($im);
return false;
}
imagecopyresampled($tIm,$im,0,0,0,0,40,$dy,$x,$y);
imagepng ($tIm, $thumbName.'.png' );
imagedestroy($tIm);
}
imagedestroy($im);
return true;
}
znajdzZdjecia();
?>
działanie jest następujące.
znajdzZdjecia() wyszukuje zdjęć brakujących u nas na komputerze.
jeżeli jakiegoś brakuje to zbierzZdjecie() pobiera z WebSerwisu informacje o nim które następnie przekazuje do downloadPhoto().
downloadPhoto() pobiera brakujące zdjęcie i miniaturka() tworzy miniaturki w png i gif
Nie wiem czy to właśnie nie wina SOAPClienta (korzystam z tego wbudowanego w PHP5). Bo przy większej ilości zapytań SOAP (ok 1000) zawsze mi się wykrzacza.