Объявлять пустой массив, заполнять и повторять проблемы - PHP - PullRequest
4 голосов
/ 22 декабря 2009

Я написал скрипт для чтения каталога Netflix и заполнения своей БД. Все отлично работало как веб-скрипт (за исключением тайм-аутов), поэтому я перешел на , вызывая напрямую из консоли .

Я заметил несколько странностей, например, __construct (), который больше не вызывается (но это легко исправить, используя имя класса в качестве функции.

Теперь я не могу заставить работать мои массивы, как раньше , вот общая идея.

(На самом деле я пробовал несколько комбинаций, поэтому я поделюсь ими всеми)

1 - это отлично работало в версии веб-скрипта, больше не работает при вызове из консоли

//declare empty
var $genreArray=array();

//later I add values one at a time as the XML is parsed
array_push($this->genreArray,$attrs['term']);

//after I have parsed an entire "title" element, I iterate the array
foreach ($this->genreArray as $value) {
    // never gets called - array seen as empty
    $this->db->linkGenre($value,$this->title_uid);
}

2 - поэтому я попробовал руководство по PHP; рекомендация - ничего

//declare empty
var $genreArray=array();

//later I add values one at a time as the XML is parsed
$this->genreArray[]=$attrs['term'];

//after I have parsed an entire "title" element, I iterate the array
foreach ($this->genreArray as $value) {
    // never gets called - array seen as empty
    $this->db->linkGenre($value,$this->title_uid);
}

3 - наконец, я попытался вручную отследить индекс

//declare empty array
var $genreArray=array();
var $gi=0;

//later I add values one at a time as the XML is parsed
$this->genreArray[$this->gi++]=$attrs['term'];

//after I have parsed an entire "title" element, I iterate the array
foreach ($this->genreArray as $value) {
    // never gets called - array seen as empty
    $this->db->linkGenre($value,$this->title_uid);
}

Так что я сейчас в полном недоумении.

Кто-нибудь объявлял пустые массивы и заполнял их через консоль?

(Все 3 из них работают через Интернет - поэтому мне нужен консольный эксперт здесь)


Спасибо за поддержку, вот запрашиваемая дополнительная информация;

php -v

PHP 4.4.9 (cli) (сборка: 17 сентября 2008 г., 12:02:18) Copyright (c) 1997-2008 The PHP Group Zend Engine v1.3.0, Copyright (c) 1998-2004 Zend Technologies с Zend Extension Manager v1.2.2, Copyright (c) 2003-2007, Zend Technologies с Zend Optimizer v3.3.3, Copyright (c) 1998-2007, Zend Technologies


Каждый фрагмент был опробован в отдельном прогоне. Какие подробности о классе вас интересуют?

Я использовал операторы echo, чтобы убедиться, что код вызывается, как и ожидалось. И если я нажимаю на сценарий через URL-адрес, все запускается нормально (за первые несколько тысяч записей до истечения времени ожидания).


Не выдается никаких ошибок, я даже пытался добавить ...

error_reporting(E_ALL);
ini_set('display_errors', true);

Ответы [ 4 ]

2 голосов
/ 22 декабря 2009

Я заметил несколько странностей, например, __construct (), который больше не вызывается (но это легко было исправить, используя имя класса как функцию.

Похоже, что у вашей командной строки и веб-сервера PHP разные версии. Ваш CLI PHP 4? Функция phpversion() сообщит вам версию как в CLI, так и в Интернете.

Вы проверили свой журнал ошибок? Вы не упомянули об этом, но это было бы первое место, чтобы посмотреть.

1 голос
/ 22 декабря 2009

Я заметил несколько странностей, вроде __construct () больше не вызывается (но это легко было исправить, используя имя класса как функция.

Это кажется странным. Какую версию PHP вы использовали в веб-скрипте и какую версию в консоли?

Введите php -v, чтобы узнать версию.

0 голосов
/ 11 июля 2011

Попробуйте удалить var из var $genreArray=array();

У меня была такая же проблема, и удаление var исправило ее.

0 голосов
/ 22 декабря 2009

Чтобы избежать тайм-аута без CLI, вы можете сделать что-то вроде этого:

set_time_limit(0);

Вы, похоже, используете var вместо public для объявлений свойств класса, что вместе с тем фактом, что вы не можете использовать __construct(), заставляет меня догадаться, что вы используете PHP 4, это правильно?

Где объявлено $attrs['term']? 1013 *

Попробуйте сделать var_dump($attrs['term']);, чтобы увидеть, что произойдет.

Еще одна вещь, которая не пахнет правильно, это следующие строки:

array_push($this->genreArray,$attrs['term']);
$this->genreArray[]=$attrs['term'];
$this->genreArray[$this->gi++]=$attrs['term'];

$attrs['term'] кажется массивом, но вы не просматриваете его. Если эти строки не являются отдельным методом, я думаю, что-то там не так.

Кроме того, код, который вы предоставили нам, является частью класса? Просто чтобы убедиться ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...