|
|
|
| Подскажите пожалуйста, почему скрипт обрабатывает только первые три записи в таблице и устанавливает для них статус 1
<?
function HaveFile($file){
$file = fopen ($file, "r");
if (!$file) {
return false;
}
return true;
}
function LoadIMage() {
$select_images = mysql_query('SELECT image_tmp,id FROM cars_images WHERE status = 0 ORDER BY id DESC LIMIT 0,1');
if (mysql_num_rows($select_images)>0){
$name = mt_rand(0, 1000);
$row = mysql_fetch_array($select_images);
if (HaveFile($row['image_tmp'])) {
if (file_put_contents('images/'.$name.'_'.$row['id'].'.'.getExtension4($row['image_tmp']), file_get_contents($row['image_tmp']))) {
$db = mysql_query('UPDATE cars_images set status=1, image = "'.$name.'_'.$row['id'].'.'.getExtension4($row['image_tmp']).'" WHERE id="'.$row['id'].'"');
LoadIMage();
}
} else {
$db = mysql_query('UPDATE cars_images set status=3 WHERE id="'.$row['id'].'"');
LoadIMage();
sleep(1);
}
}
}
?>
|
Вызов: | |
|
|
|
|
|
|
|
для: OLi
(11.12.2012 в 18:51)
| | Может потому что условие WHERE id="'.$row['id'].'" соответствует только первым трем записям таблицы? | |
|
|
|
|
|
|
|
для: Mookapek
(11.12.2012 в 20:01)
| | Думаю, что не в этом дело, потому как запрос выше выполняется всегда, значит возвращает $row['id'] | |
|
|
|
|
|
|
|
для: OLi
(12.12.2012 в 18:06)
| | Может приведете часть таблицы, 5 первых записей? | |
|
|
|
|
|
|
|
для: OLi
(11.12.2012 в 18:51)
| | Как я понимаю выход из рекурсии случится в двух случаях:
1. В таблице не останется ни одной записи со статусом 0, т.е.
mysql_num_rows($select_images)>0
|
вернет FALSE.
2. Не удается записать файл функцией file_put_contents(), т.е.
file_put_contents('images/'.$name.'_'.$row['id'].'.'.getExtension4($row['image_tmp']), file_get_contents($row['image_tmp']))
|
вернет FALSE.
Видимо проблема во втором случае. Проверяйте почему не пишется файл.
Вообще, на мой взгляд вам стоит переделать этот скрипт:
1. Насколько я могу судить, вы хотите перебрать все записи со статусом 0 и с ними проделать всякие нужные штуки. Если да, то зачем здесь рекурсия? Зачем дергать из базы по одной записи? Выберете все сразу и в цикле обойдите их.
2. HaveFile() - проверяет существование файла? Если да, то для этого существует готовая функция file_exists(). Тем более, что открытый поток надо бы закрывать.
3. file_put_contents('images/'.$name.'_'.$row['id'].'.'.getExtension4($row['image_tmp']), file_get_contents($row['image_tmp'])) - это копирование файла с переименованием? воспользуйтесь функцией copy() | |
|
|
|
|
|
|
|
для: Igorek
(12.12.2012 в 19:35)
| | раз файлы удаленные, то последние 2 пункта надо вычеркнуть. не знал, погорячился. | |
|
|
|
|
|
|
|
для: OLi
(11.12.2012 в 18:51)
| | А действительно, зачем функция сама себя вызывает? Делайте запрос без лимита и обрабатывайте в цикле. По умолчанию время работы скрипта ограничено 30 секундами, для увеличения времени работы скрипта используйте set_time_limit( int second) | |
|
|
|