Форум
Господа (и Дамы),
что-то я не понимаю, как запустить команду php через консоль.
Порядок действий такой:
1. Запустил сервер
2. Запустил консоль
3. дал команду php -a (получил ответ Interactive mode enabled)
4. А далее тишина или я что-то не так делаю или что-то не то сделал.
Пишу, что вроде:
$a = 1;
echo «$a»;
И ничего не выводится. Приглашения строки тоже нет.
Максим Сообщения: 6022 Зарегистрирован: 11 дек 2010, 20:29
После Interactive mode enabled можно писать. Команды ваши не выводятся потому, что в первой строке вы не написали:
$a = 1;
echo «$a»;
Nikolay Сообщения: 4 Зарегистрирован: 26 май 2014, 09:48
Спасибо за ответ!
Максим, я продолжаю задавать глупые вопросы.
То о чем вы говорите, не помогло.
C:\Study\Sites\OpenServer\modules\ConEmu>php -a Interactive mode enabled
И тишина.
Что я делаю не так.
Максим Сообщения: 6022 Зарегистрирован: 11 дек 2010, 20:29
Nikolay писал(а): Что я делаю не так.
У меня после ввода echo «$a»; и нажатия на ввод сразу выводится единица в консоль, как и должна. Если вы не набираете текст руками, а тупо вставляете сразу весь кусок кода в консоль, то после вставки нужно нажать ENTER потом CTRL+Z потом еще раз ENTER. Тогда ваш скрипт и отработает и ответ выведется в консоль, только вот сам php(интерактивный режим) прекратит работу. Такая вот глючный у PHP шелл под windows. (все советы взяты с официального сайта документации PHP)
Nikolay Сообщения: 4 Зарегистрирован: 26 май 2014, 09:48
Нажимаю Enter и ничего не просходит. Ладно, спасибо за помощь )))
Asmodey Сообщения: 338 Зарегистрирован: 18 апр 2012, 10:33
Enter — конец строки.
Ctrl+Z — закрытие файла, начинает парсить и исполнять(!).
Максим Сообщения: 6022 Зарегистрирован: 11 дек 2010, 20:29
Asmodey писал(а): Enter — конец строки.
Ctrl+Z — закрытие файла, начинает парсить и исполнять(!).
Ну вот видите, у товарища чего-то не исполняет. Мистика однако.
Nikolay Сообщения: 4 Зарегистрирован: 26 май 2014, 09:48
Максим,
Прошу прощения. Я не заметил, что надо два раза нажать Enter и команду CTRL-Z
Правда в таком смысле это теряет смысл. Мне это нужно было для того, чтобы проверить быстро, что я колякаю и работает ли это. А тут быстро не получится.
Консоль Artisan
Artisan – это интерфейс командной строки, входящий в состав Laravel. Он предлагает ряд полезных команд, которые помогут при создании приложения. Для просмотра списка всех доступных команд Artisan можно использовать команду list :
php artisan list
Каждая команда также включает в себя экран «справки», который отображает и описывает доступные аргументы и параметры команды. Чтобы просмотреть экран справки, используйте help перед именем команды:
php artisan help migrate
Laravel Sail
Если вы используете Laravel Sail в качестве локальной среды разработки, не забудьте использовать командную строку sail для вызова команд Artisan. Sail выполнит ваши команды Artisan в контейнерах Docker вашего приложения:
./sail artisan list
Tinker (REPL)
Laravel Tinker – это мощный REPL для фреймворка Laravel, основанный на пакете PsySH.
Установка
Все приложения Laravel по умолчанию включают Tinker. Однако вы можете установить Tinker с помощью Composer, если вы ранее удалили его из своего приложения:
composer require laravel/tinker
Ищете графический интерфейс для взаимодействия с приложением Laravel? Зацените Tinkerwell!
Использование
Tinker позволяет взаимодействовать полностью со всем приложением Laravel из командной строки, включая модели Eloquent, задачи, события и многое другое. Чтобы войти в среду Tinker, выполните команду tinker Artisan:
php artisan tinker
Вы можете опубликовать конфигурационный файл Tinker с помощью команды vendor:publish :
php artisan vendor:publish --provider="Laravel\Tinker\TinkerServiceProvider"
Глобальный помощник dispatch и метод dispatch класса Dispatchable зависят от «garbage collection» для помещения задания в очередь. Следовательно, при использовании Tinker вы должны использовать Bus::dispatch или Queue::push для отправки заданий.
Список разрешенных команд
Tinker использует список «разрешенных» команд, которые разрешено запускать Artisan в её среде. По умолчанию вы можете запускать команды clear-compiled , down , env , inspire , migrate , optimize и up . Для добавления в этот список больше команд, добавьте их в массив commands конфигурационного файла config/tinker.php :
'commands' => [ // App\Console\Commands\ExampleCommand::class, ],
Черный список псевдонимов
Как правило, Tinker автоматически создает псевдонимы классов, когда вы взаимодействуете с ними в Tinker. Тем не менее вы можете запретить такое поведение для некоторых классов, перечислив их в массиве dont_alias конфигурационного файла config/tinker.php :
'dont_alias' => [ App\Models\User::class, ],
Написание команд
В дополнение к командам Artisan, вы можете создавать пользовательские команды. Команды обычно хранятся в каталоге app/Console/Commands ; однако вы можете выбрать другое месторасположение, если эти команды могут быть загружены менеджером Composer.
Генерация команд
Чтобы сгенерировать новую команду, используйте команду make:command Artisan. Эта команда поместит новый класс команды в каталог app/Console/Commands вашего приложения. Если этот каталог не существует в вашем приложении, то Laravel предварительно создаст его:
php artisan make:command SendEmails
Структура команды
После создания команды следует заполнить свойства класса $signature и $description . Эти свойства будут отображаться на экране при использовании команды list . Свойство $signature также позволяет определять вводимые данные. Метод handle будет вызываться при выполнении команды. Вы можете разместить логику команды в этом методе.
Давайте рассмотрим пример команды. Обратите внимание, что мы можем запросить любые необходимые зависимости в методе handle команды. Контейнер служб Laravel автоматически внедрит все зависимости, типы которых объявлены в этом методе:
namespace App\Console\Commands; use App\Models\User; use App\Support\DripEmailer; use Illuminate\Console\Command; class SendEmails extends Command < /** * Имя и сигнатура консольной команды. * * @var string */ protected $signature = 'mail:send '; /** * Описание консольной команды. * * @var string */ protected $description = 'Send a marketing email to a user'; /** * Создать новый экземпляр команды. * * @return void */ public function __construct() < parent::__construct(); > /** * Выполнить консольную команду. * * @param \App\Support\DripEmailer $drip * @return mixed */ public function handle(DripEmailer $drip) < $drip->send(User::find($this->argument('user'))); > >
Хорошей практикой повторного использования кода считается создание «простых» консольных команд с делегированием своих задач службам приложения. В приведенном примере мы внедряем класс службы для выполнения «затратной» отправки электронных писем.
Анонимные команды
Анонимные команды обеспечивают альтернативу определению консольных команд в виде классов. Точно так же, как замыкания маршрутов являются альтернативой контроллерам. В рамках метода commands файла app/Console/Kernel.php Laravel загружает файл routes/console.php :
/** * Зарегистрировать команды, основанные на анонимных функциях. * * @return void */ protected function commands() < require base_path('routes/console.php'); >
Этот файл не определяет маршруты HTTP, он определяет точки входа (маршруты) для консольных команд в приложении. В этом файле с помощью метода Artisan::command можно определить все анонимные консольные команды. Метод command принимает два аргумента: сигнатуру команды и замыкание, которое получает аргументы и параметры команды:
Artisan::command('mail:send ', function ($user) < $this->info("Sending email to: !"); >);
Замыкание привязано к базовому экземпляру команды, поэтому у вас есть полный доступ ко всем вспомогательным методам, к которым вы обычно можете обращаться в команде, созданной с помощью класса.
Типизация зависимостей
Помимо получения аргументов и параметров, замыкание анонимной команды также принимает дополнительные зависимости из контейнера служб, необходимые для внедрения:
use App\Models\User; use App\Support\DripEmailer; Artisan::command('mail:send ', function (DripEmailer $drip, $user) < $drip->send(User::find($user)); >);
Описания анонимных команд
При определении анонимных команд, можно использовать метод purpose для добавления описания команды. Это описание будет отображаться при запуске команд php artisan list и php artisan help :
Artisan::command('mail:send ', function ($user) < // . >)->purpose('Send a marketing email to a user');
Определение вводимых данных
При написании консольных команд обычно происходит сбор данных, получаемых от пользователя, с помощью аргументов или параметров. Laravel позволяет очень удобно определять входные данные, которые вы ожидаете от пользователя, используя свойство $signature команды. Свойство $signature позволяет определить имя, аргументы и параметры команды в едином выразительном синтаксисе, схожим с синтаксисом маршрутов.
Аргументы
Все предоставленные пользователем аргументы и параметры заключаются в фигурные скобки. В следующем примере команда определяет один обязательный аргумент user :
/** * Имя и сигнатура консольной команды. * * @var string */ protected $signature = 'mail:send ';
По желанию можно сделать аргументы необязательными или определить значения по умолчанию:
// Необязательный аргумент . mail:send // Необязательный аргумент с заданным по умолчанию значением . mail:send
Параметры
Параметры, как и аргументы, являются разновидностью пользовательского ввода. Параметры должны иметь префикс в виде двух дефисов ( — ), при использовании их в командной строке. Существует два типа параметров: получающие значение, и те, которые его не получают. Параметры, которые не получают значение, служат логическими «переключателями». Давайте рассмотрим пример такого варианта:
/** * Имя и сигнатура консольной команды. * * @var string */ protected $signature = 'mail:send ';
В этом примере при вызове команды Artisan может быть указан переключатель —queue . Если переключатель —queue передан, то значение этого параметра будет true . В противном случае значение будет false :
php artisan mail:send 1 --queue
Параметры со значениями
Давайте рассмотрим параметр, ожидающий значение. Если пользователь должен указать значение для параметра, то добавьте суффикс = к имени параметра:
/** * Имя и сигнатура консольной команды. * * @var string */ protected $signature = 'mail:send ';
В этом примере пользователь может передать значение для параметра. Если параметр не указан при вызове команды, то его значение будет null :
php artisan mail:send 1 --queue=default
Параметру можно присвоить значение по умолчанию, указав его после имени. Если значение параметра не передано пользователем, то будет использовано значение по умолчанию:
mail:send default>
Псевдонимы параметров
Чтобы назначить псевдоним при определении параметра, вы можете указать его перед именем параметра и использовать символ разделителя | для отделения псевдонима от полного имени параметра:
mail:send
При вызове команды в терминале, псевдонимы параметров должны иметь префикс с одним дефисом
php artisan mail:send 1 -Q
Массивы данных
Чтобы определить, что аргументы или параметры ожидают массив данных, используйте метасимвол * . Во-первых, давайте рассмотрим пример, в котором описывается аргумент как массив данных:
mail:send
При вызове этого метода аргументы user могут передаваться по порядку в командную строку. Например, следующая команда установит значение user как [‘foo’, ‘bar’] :
php artisan mail:send foo bar
Метасимвол * можно комбинировать с необязательным определением аргумента, чтобы разрешить ноль или более экземпляров аргумента:
mail:send
Параметр со множеством значений
При определении параметра, ожидающего множество значений, каждое значение передаваемого команде параметра должно иметь префикс с именем параметра:
mail:send php artisan mail:send --id=1 --id=2
Описания вводимых данных
Вы можете назначить описания входным аргументам и параметрам, отделив имя аргумента от описания с помощью двоеточия. Если вам нужно немного больше места для определения вашей команды, то распределите определение на несколько строк:
/** * Имя и сигнатура консольной команды. * * @var string */ protected $signature = 'mail:send ';
Ввод/вывод команды
Получение входных данных
Во время выполнения команды вам, вероятно, потребуется получить доступ к значениям аргументов и параметров, принятых командой. Для этого вы можете использовать методы argument и option . Если аргумент или параметр не существует, то будет возвращено значение null .
/** * Выполнить консольную команду. * * @return int */ public function handle() < $userId = $this->argument('user'); // >
Если вам нужно получить все аргументы в виде массива, вызовите метод arguments :
$arguments = $this->arguments();
Параметры могут быть получены так же легко, как и аргументы, используя метод option . Чтобы получить все параметры в виде массива, вызовите метод options :
// Получение определенного параметра . $queueName = $this->option('queue'); // Получение всех параметров в виде массива . $options = $this->options();
Запрос для ввода данных
Помимо отображения вывода, вы можете попросить пользователя предоставить данные во время выполнения вашей команды. Метод ask отобразит пользователю указанный вопрос, примет его ввод, а затем вернет эти данные, полученные от пользователя, обратно в команду:
/** * Выполнить консольную команду. * * @return mixed */ public function handle() < $name = $this->ask('What is your name?'); >
Метод secret похож на ask , но ввод пользователя не будет виден ему в консоли при вводе. Этот метод полезен при запросе конфиденциальной информации, например, пароля:
$password = $this->secret('What is the password?');
Запрос подтверждения
Если вам нужно получить от пользователя простое подтверждение «yes or no», то вы можете использовать метод confirm . По умолчанию этот метод возвращает значение false . Однако, если пользователь вводит y или yes в ответ на запрос, то метод возвращает true .
if ($this->confirm('Do you wish to continue?')) < // >
По желанию можно указать, что запрос подтверждения должен по умолчанию возвращать true , передав true в качестве второго аргумента метода confirm :
if ($this->confirm('Do you wish to continue?', true)) < // >
Автозавершение
Метод anticipate используется для автоматического завершения возможных вариантов. Пользователь по-прежнему может дать любой ответ, независимо от подсказок автозавершения:
$name = $this->anticipate('What is your name?', ['Taylor', 'Dayle']);
В качестве альтернативы, вы можете передать замыкание в качестве второго аргумента метода anticipate . Замыкание будет вызываться каждый раз, когда пользователь вводит символ. Замыкание должно принимать строковый параметр, содержащий введенные пользователем данные, и возвращать массив вариантов для автозавершения:
$name = $this->anticipate('What is your address?', function ($input) < // Вернуть варианты для автоматического завершения . >);
Вопросы с множественным выбором
Если нужно предоставить пользователю предопределенный набор вариантов для выбора при задании вопроса, то используйте метод choice . Вы можете установить индекс массива для возвращаемого по умолчанию значения, если не выбран ни один из вариантов, передав индекс в качестве третьего аргумента метода:
$name = $this->choice( 'What is your name?', ['Taylor', 'Dayle'], $defaultIndex );
Кроме того, метод choice принимает необязательные четвертый и пятый аргументы для определения максимального количества попыток выбора действительного ответа и того, разрешен ли множественный выбор:
$name = $this->choice( 'What is your name?', ['Taylor', 'Dayle'], $defaultIndex, $maxAttempts = null, $allowMultipleSelections = false );
Вывод данных
Чтобы вывести в консоль, используйте методы line , info , comment , question , warn и error . Каждый из этих методов будет использовать соответствующие ANSI-цвета. Например, давайте покажем пользователю некоторую общую информацию. Обычно метод info отображается в консоли в виде зеленого текста:
/** * Выполнить консольную команду. * * @return mixed */ public function handle() < // . $this->info('The command was successful!'); >
Для отображения сообщения об ошибке используйте метод error . Текст сообщения об ошибке обычно отображается красным цветом:
$this->error('Something went wrong!');
Вы можете использовать метод line для отображения простого неокрашенного текста:
$this->line('Display this on the screen');
Вы можете использовать метод newLine для отображения пустой строки:
// Вывести одну пустую строку . $this->newLine(); // Вывести три пустые строки . $this->newLine(3);
Таблицы
Метод table упрощает корректное форматирование нескольких строк / столбцов данных. Все, что вам нужно сделать, это указать имена столбцов и данные для таблицы, и Laravel автоматически рассчитает подходящую ширину и высоту таблицы:
use App\Models\User; $this->table( ['Name', 'Email'], User::all(['name', 'email'])->toArray() );
Индикаторы выполнения
Для длительно выполняемых задач было бы полезно показать индикатор выполнения, информирующий пользователя о том, насколько завершена задача. Используя метод withProgressBar , Laravel будет отображать индикатор выполнения и продвигать его для каждой итерации на заданное повторяемое значение:
use App\Models\User; $users = $this->withProgressBar(User::all(), function ($user) < $this->performTask($user); >);
Иногда может потребоваться больший контроль над продвижением индикатора выполнения. Сначала определите общее количество шагов, через которые будет проходить процесс. Затем продвигайте индикатор выполнения после обработки каждого элемента:
$users = App\Models\User::all(); $bar = $this->output->createProgressBar(count($users)); $bar->start(); foreach ($users as $user) < $this->performTask($user); $bar->advance(); > $bar->finish();
Регистрация команд
Все ваши консольные команды должны быть зарегистрированы в классе App\Console\Kernel , который является «ядром консоли» вашего приложения. Внутри метода commands этого класса вы увидите вызов метода load ядра. Метод load просканирует каталог app/Console/Commands и автоматически зарегистрирует каждую содержащуюся в нем команду в Artisan. Фактически, вы можете делать дополнительные вызовы метода load для сканирования других каталогов на наличие команд Artisan:
/** * Зарегистрировать команды приложения. * * @return void */ protected function commands() < $this->load(__DIR__.'/Commands'); $this->load(__DIR__.'/../Domain/Orders/Commands'); // . >
Вы можете самостоятельно зарегистрировать команды, добавив название класса команды в свойство $commands класса App\Console\Kernel . Если это свойство еще не определено в вашем ядре, вы должны определить его вручную. При загрузке Artisan, все команды, перечисленные в этом свойстве будут доступны в контейнере служб и зарегистрированы в Artisan:
protected $commands = [ Commands\SendEmails::class ];
Программное выполнение команд
По желанию можно выполнить команду Artisan за пределами CLI. Например, вы можете запустить команду Artisan в маршруте или контроллере. Для этого можно использовать метод call фасада Artisan . Метод call принимает в качестве первого аргумента либо имя сигнатуры команды, либо имя класса, а в качестве второго – массив параметров команды. Будет возвращен код выхода / возврата:
use Illuminate\Support\Facades\Artisan; Route::post('/user//mail', function ($user) < $exitCode = Artisan::call('mail:send', [ 'user' => $user, '--queue' => 'default' ]); // >);
Кроме того, вы можете передать методу call команду полностью в виде строки:
Artisan::call('mail:send 1 --queue=default');
Передача массива значений
Если ваша команда определяет параметр, который принимает массив, то вы можете передать массив значений этому параметру:
use Illuminate\Support\Facades\Artisan; Route::post('/mail', function () < $exitCode = Artisan::call('mail:send', [ '--id' => [5, 13] ]); >);
Передача значений логического типа
Если необходимо указать значение параметра, который не принимает строковые значения, например флаг —force в команде migrate:refresh , то вы должны передать true или false как значение параметра:
$exitCode = Artisan::call('migrate:refresh', [ '--force' => true, ]);
Очереди команд Artisan
Используя метод queue фасада Artisan , вы можете даже поставить команды Artisan в очередь, чтобы они обрабатывались в фоновом режиме обработчиком очереди. Перед использованием этого метода убедитесь, что вы настроили очереди и был запущен слушатель очереди:
use Illuminate\Support\Facades\Artisan; Route::post('/user//mail', function ($user) < Artisan::queue('mail:send', [ 'user' => $user, '--queue' => 'default' ]); // >);
Используя методы onConnection и onQueue , вы также можете указать соединение или очередь, в которую должна быть отправлена команда Artisan:
Artisan::queue('mail:send', [ 'user' => 1, '--queue' => 'default' ])->onConnection('redis')->onQueue('commands');
Вызов команд из других команд
По желанию можно вызвать другие команды из существующей команды Artisan. Вы можете сделать это с помощью метода call . Метод call принимает имя команды и массив аргументов / параметров команды:
/** * Выполнить консольную команду. * * @return mixed */ public function handle() < $this->call('mail:send', [ 'user' => 1, '--queue' => 'default' ]); // >
Если вы хотите вызвать другую консольную команду в тихом режиме, то используйте метод callSilently . Метод callSilently имеет ту же сигнатуру, что и метод call :
$this->callSilently('mail:send', [ 'user' => 1, '--queue' => 'default' ]);
Обработка сигналов
Компонент Symfony Console, на основе которого сделан Artisan, позволяет указать, какие сигналы процессов обрабатываются вашей командой. Например, Вы можете указать, что Ваша команда обрабатывает сигналы SIGINT и SIGTERM .
Чтобы воспользоваться этой фичей, имплементируйте Symfony\Component\Console\Command\SignalableCommandInterface . Этот интерфейс требует наличия в классе методов getSubscribedSignals и handleSignal :
use Symfony\Component\Console\Command\SignalableCommandInterface; class StartServer extends Command implements SignalableCommandInterface < // . /** * Get the list of signals handled by the command. * * @return array */ public function getSubscribedSignals(): array < return [SIGINT, SIGTERM]; > /** * Handle an incoming signal. * * @param int $signal * @return void */ public function handleSignal(int $signal): void < if ($signal === SIGINT) < $this->stopServer(); return; > > >
Метод getSubscribeSignals должен возвращать массив сигналов, который ваша команда может обрабатывать, а метод handleSignal принимает сигнал и может реагировать соответственно.
Настройка заготовок команд (stubs)
Команды make консоли Artisan используются для создания различных классов, таких как контроллеры, задания, миграции и тесты. Эти классы создаются с помощью файлов «заготовок», которые заполняются значениями на основе ваших входных данных. Однако, иногда может потребоваться внести небольшие изменения в файлы, создаваемые с помощью Artisan. Для этого можно использовать команду stub:publish , чтобы опубликовать наиболее распространенные заготовки для их дальнейшего изменения:
php artisan stub:publish
Опубликованные заготовки будут расположены в каталоге stubs корня вашего приложения. Любые изменения, внесенные вами в эти заготовки, будут учтены при создании соответствующих классов с помощью команд make Artisan.
События
Artisan запускает три события при выполнении команд: Illuminate\Console\Events\ArtisanStarting , Illuminate\Console\Events\CommandStarting , и Illuminate\Console\Events\CommandFinished . Событие ArtisanStarting выполняется сразу после запуска Artisan. Затем событие CommandStarting выполняется непосредственно перед запуском команды. Наконец, событие CommandFinished выполняется после завершения команды.
Русскоязычное комьюнити
- Группа в VK
- Телеграм LaravelRUS
- Телеграм Laravel для новичков
- Телеграм LaravelPro
Обучающие ресурсы
- Laracasts
- Codecourse
- Курс Дмитрия Елисеева
- Adam Wathan
Блоги разработчиков
- Laravel News
- Freek Van der Herten
- Brent Roose
- Marcel Pociot
Как запустить php через консоль
Покинул форум
Сообщений всего: 11
Дата рег-ции: Апр. 2012
Помог: 0 раз(а)
Не работают консольные команды PHP. Я пытаюсь создать приложение в yii с помощью yiic — консольной утилиты.
Даже если просто попытаться запустить php.exe без каких-либо параметров выдает ошибку:
Запуск программы не возможен, так как на компьютере отсутсвует php4ts.dll.
Причем у меня PHP 5 установлен и там есть файл php5ts.dll.
Что делать, не пойму.
Отправлено: 10 Февраля, 2013 — 10:47:38
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008
Откуда: Альфа Центавра
Помог: 353 раз(а)
А как вы запускаете?
Вот я никогда в винде не запускал php в кансольке
Это вот щас в баше:
CODE (bash):
скопировать код в буфер обмена
~$ echo ‘А как в виндовой кансоли? Можт вы что-то не так делаете?
Отправлено: 10 Февраля, 2013 — 10:54:27
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011
Откуда: Харьков
Помог: 126 раз(а)
Цитата:
А как в виндовой кансоли?
Отправлено: 10 Февраля, 2013 — 11:02:45
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008
Откуда: Альфа Центавра
Помог: 353 раз(а)
Что php.exe?
(Добавление)
А если он в переменные среды не добавил? или куда там надо добавлять..
(Добавление)
Пусть сам напишет, я ему вопрос задавал
Отправлено: 10 Февраля, 2013 — 12:17:27
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
Добавьте путь до php в переменную окружения path
http://clip2net[dot]com/s/2OyFi
там всего пару раз мышкой кликнуть
(Добавление)
после откройте консоль и попробуйте выполнить команду
CODE (cmd):
скопировать код в буфер обмена
если пых покажет свою версию, то все работает
CODE (cmd):
скопировать код в буфер обмена
c:\Users\DelphinPRO>php -v
PHP 5.3.17 (cli) (built: Sep 13 2012 00:33:20)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies
(Отредактировано автором: 10 Февраля, 2013 — 12:21:52)
——
Чем больше узнаю, тем больше я не знаю.
Отправлено: 10 Февраля, 2013 — 13:33:03
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011
Откуда: Харьков
Помог: 126 раз(а)
не надо там ничего добавлять — php5ts.dll он так увидит -он в том же каталоге что и php.exe
Отправлено: 10 Февраля, 2013 — 14:13:08
Покинул форум
Сообщений всего: 11
Дата рег-ции: Апр. 2012
Помог: 0 раз(а)
В переменные среды все добавил.
php.exe прекрасно находится и папка с PHP тоже.
Проблема в чем-то другом.
Я говорю, я в ручную захожу в папку с PHP и запускаю pxp.exe и выдается ошибка.
Тут уж и php.exe и php5ts.dll видны отлично.
Цитата:
php YiiRoot/framework/yiic.php webapp testdrive
Другими словами тут запускается файл pxp.exe с некоторыми параметрами из командной строки. Но как с параметрами, так и просто pxp.exe без параметров выдает ошибочку —
запуск программы невозможен, так как на компьютере отсутсвует php4ts.dll.
Конкретно на команду pvp -v
выдает сначала окошко с ошибкой, потом в консоли вылезают ворнинги. Ворнинги такие:
C:\Apache\PHP5>php -v
PHP Warning: PHP Startup: Unable to load dynamic library ‘c:/Apache/PHP5/ext\ph
p_mssql.dll’ — ═х эрщфхэ єърчрээ√щ ьюфєы№.
in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library ‘c:/Apache/PHP5/ext\ph
p_pdo.dll’ — ═х эрщфхэ єърчрээ√щ ьюфєы№.
in Unknown on line 0
PHP 5.3.5 (cli) (built: Jan 6 2011 17:54:09)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
(Отредактировано автором: 10 Февраля, 2013 — 14:21:24)
Отправлено: 10 Февраля, 2013 — 14:30:02
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
Да, действительно. Не подумал, что раз запускается, то находит путь.
попробуйте
— запустить консоль от имени администратора
— скопировать php5ts.dll в c:\windows\system32
— проверить уровень доступа к файлу (свойства — вкладка «безопасность»)
может просто прав не хватает для доступа к файлу?
——
Чем больше узнаю, тем больше я не знаю.
Отправлено: 10 Февраля, 2013 — 14:40:57
Покинул форум
Сообщений всего: 11
Дата рег-ции: Апр. 2012
Помог: 0 раз(а)
DelphinPRO пишет:
попробуйте
— запустить консоль от имени администратора
— скопировать php5ts.dll в c:\windows\system32
— проверить уровень доступа к файлу (свойства — вкладка «безопасность»)
может просто прав не хватает для доступа к файлу?
Все сделал, результат тотже.
Во вкладке Безопасность есть следующие группы:
— Прошедшие проеврку
— система
— Администраторы
— Пользователи
у всех напротив Чтение и выполнение стоит галочка, остальные галочки по разному.
По поводу ворнингов — добавил путь к папке PHP5/ext в Path тоже не помогло.
Причем в папке ext есть файл php_mssql.dll, а файла php_pdo.dll нет. Но мне почему то кажется что не в ворнингах дело.
Отправлено: 10 Февраля, 2013 — 14:45:04
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
dbodb пишет:
добавил путь к папке PHP5/ext
его нужно в php.ini указывать.
параметр extensions_dir
но он у вас скорее всего задан.
ошибка из-за того, что не подгружается php5ts.dll
——
Чем больше узнаю, тем больше я не знаю.
Отправлено: 10 Февраля, 2013 — 14:47:40
Покинул форум
Сообщений всего: 11
Дата рег-ции: Апр. 2012
Помог: 0 раз(а)
DelphinPRO пишет:
параметр extensions_dir
но он у вас скорее всего задан.
В php.ini есть такая строчка, она раскоментирована:
extension_dir = c:/Apache/PHP5/ext
(Отредактировано автором: 10 Февраля, 2013 — 14:48:48)
Отправлено: 10 Февраля, 2013 — 14:51:27
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
ну всё, я — пас ждите ответа спецов
лично я готовые сборки использую, которые работают «из коробки»
——
Чем больше узнаю, тем больше я не знаю.
Отправлено: 10 Февраля, 2013 — 14:53:33
Покинул форум
Сообщений всего: 11
Дата рег-ции: Апр. 2012
Помог: 0 раз(а)
Все равно, спасибо за помощь.
Версии:
Apache/2.2.22 (Win32)
PHP/5.3.5
(Отредактировано автором: 10 Февраля, 2013 — 15:02:17)
Отправлено: 10 Февраля, 2013 — 15:11:28
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011
Откуда: Харьков
Помог: 126 раз(а)
закоментируй в php.ini либы на которые ворнинги.
однозначно — криво установлен php или ты там где то полазил
не запустится — просто переустанови
Отправлено: 10 Февраля, 2013 — 15:16:11
Покинул форум
Сообщений всего: 11
Дата рег-ции: Апр. 2012
Помог: 0 раз(а)
caballero пишет:
закоментируй в php.ini либы на которые ворнинги.
однозначно — криво установлен php или ты там где то полазил
не запустится — просто переустанови
Закоментировал. Окошко с ошибкой больше не вылезает))) Спасибо.
Юху) Заработал мой Yiic)))
Интересно, а почему не загружался php_mssql.dll
файлик лежал в Ext, вроде все пути прописаны были
(Отредактировано автором: 10 Февраля, 2013 — 15:21:22)
Как узнать, почему падает php скрипт?
Мне нужно, чтобы машина выполняла php скрипт в фоновом режиме с ограничением по CPU. Запускаю в таком виде: nohup php -f /var/www/website/script.php based10 10000000000 > based10.log 2>&1 & cpulimit -p 1491 -l 60 -b
В какой-то момент (10, 20, 30 минут) скрипт перестаёт работать. До этого скрипт проработал 58 дней без ошибок, затем была перезагрузка системы. После перезагрузки скрипт был запущен снова, но через 20 дней упал с ошибкой:
nohup: ignoring input 123PHP Fatal error: Uncaught PDOException: SQLSTATE[08S01]: Communication link failure: 1053 Server shutdown in progress in /var/www/website/script.php:62 Stack trace: #0 /var/www/website/script.php(62): PDOStatement->execute() #1 thrown in /var/www/website/script.php on line 62
Fatal error: Uncaught PDOException: SQLSTATE[08S01]: Communication link failure: 1053 Server shutdown in progress in /var/www/website/script.php:62 Stack trace: #0 /var/www/website/script.php(62): PDOStatement->execute() #1 thrown in /var/www/website/script.php on line 62
на 62 строке находится обращение к БД: $stmt->execute([$data]);
Сейчас скрипт падает без ошибки. Просто перестаёт работать и всё.
В based10.log пусто. В mysql/error.log пусто.
Где мне ловить ошибку и понять, в чём причина падения скрипта?
accountnujen
04.02.23 22:11:06 MSK
- Ответить на это сообщение
- Ссылка
