Phpstorm не распознает php файлы

Обновлено: 04.07.2024

Из-за специфичной организации CodeIgniter (а именно способа подключения классов) связи между объектами получаются не очевидными до интерпретации и PhpStorm, как и другие IDE, их не распознаёт, и оттого автодополнение не работает почти что совсем.

Но не стоит переживать - решения есть.

Системные и пользовательские модели и библиотеки.

Отличное решение было предложено в phpStorm-CC-Helpers, на основе которого и были сделаны эти решения.

Суть решения в том, что все свойства (и, с помощью них, связи) можно прописать через @property в комментарии перед объявлением классов.

/**
* @property CI_DB_active_record $db This is the platform-independent base Active Record implementation class.
* @property CI_DB_forge $dbforge Database Utility Class
*/

Точно так же можно (или нужно) описать и свои модели:

/**
* @property Model_class_name $name_in_this
* @property User_model $user Just model for users
*/

В итоге получается вот такой набор свойств:

/**
* @property CI_DB_active_record $db This is the platform-independent base Active Record implementation class.
* @property CI_DB_forge $dbforge Database Utility Class
* @property CI_Benchmark $benchmark This class enables you to mark points and calculate the time difference between them.
Memory consumption can also be displayed.
* @property CI_Calendar $calendar This class enables the creation of calendars
* @property CI_Cart $cart Shopping Cart Class
* @property CI_Config $config This class contains functions that enable config files to be managed
* @property CI_Controller $controller This class object is the super class that every library in.
CodeIgniter will be assigned to.
* @property CI_Email $email Permits email to be sent using Mail, Sendmail, or SMTP.
* @property CI_Encrypt $encrypt Provides two-way keyed encoding using XOR Hashing and Mcrypt
* @property CI_Exceptions $exceptions Exceptions Class
* @property CI_Form_validation $form_validation Form Validation Class
* @property CI_Ftp $ftp FTP Class
* @property CI_Hooks $hooks Provides a mechanism to extend the base system without hacking.
* @property CI_Image_lib $image_lib Image Manipulation class
* @property CI_Input $input Pre-processes global input data for security
* @property CI_Lang $lang Language Class
* @property CI_Loader $load Loads views and files
* @property CI_Log $log Logging Class
* @property CI_Model $model CodeIgniter Model Class
* @property CI_Output $output Responsible for sending final output to browser
* @property CI_Pagination $pagination Pagination Class
* @property CI_Parser $parser Parses pseudo-variables contained in the specified template view,
replacing them with the data in the second param
* @property CI_Profiler $profiler This class enables you to display benchmark, query, and other data
in order to help with debugging and optimization.
* @property CI_Router $router Parses URIs and determines routing
* @property CI_Session $session Session Class
* @property CI_Sha1 $sha1 Provides 160 bit hashing using The Secure Hash Algorithm
* @property CI_Table $table HTML table generation
Lets you create tables manually or from database result objects, or arrays.
* @property CI_Trackback $trackback Trackback Sending/Receiving Class
* @property CI_Typography $typography Typography Class
* @property CI_Unit_test $unit_test Simple testing class
* @property CI_Upload $upload File Uploading Class
* @property CI_URI $uri Parses URIs and determines routing
* @property CI_User_agent $user_agent Identifies the platform, browser, robot, or mobile devise of the browsing agent
* @property CI_Validation $validation //dead
* @property CI_Xmlrpc $xmlrpc XML-RPC request handler class
* @property CI_Xmlrpcs $xmlrpcs XML-RPC server class
* @property CI_Zip $zip Zip Compression Class
* @property CI_Javascript $javascript Javascript Class
* @property CI_Jquery $jquery Jquery Class
* @property CI_Utf8 $utf8 Provides support for UTF-8 environments
* @property CI_Security $security Security Class, xss, csrf, etc.
* @property CI_Driver_Library $driver CodeIgniter Driver Library Class
* @property CI_Cache $cache CodeIgniter Caching Class
*
* User models:
* @property User_model $user User Class
* @property Main_model $main_model Main model
* @property Admin_model $admin Admin model
*/

Далее этот комментарий нужно выставить перед CI_Model и CI_Controller, то есть сразу в два места, что неудобно. Эту проблему можно решить просто: данный комментарий назначить классу-родителю, а CI_Model и CI_Controller наследовать от него. И здесь появляются два варианта:

Вариант 1.

В этом варианте код проекта не меняется вообще: используются инструменты среды PhpStorm.

К написанному выше большому комментарию со свойствами дописываем несколько строчек, а получившийся класс CIPS.php сохраняем где-нибудь вне проекта.

/**
* @property CI_DB_active_record $db This is the platform-independent base Active Record implementation class.
* .
* @property Admin_model $admin Admin model
*/

class CI_Controller extends CIPS < >
class CI_Model extends CIPS

Подключаем его как внешнюю библиотеку (External Libraries -> Configure PHP Include Paths).


Далее, чтобы имеющиеся в system/core CI_Model и CI_Controller не перебивали свойства, помечаем их как текстовые файлы (Mark as Plain Text). Ни для работы сайта ни для его разработки это не повредит - правка этих двух классов либо крайне редка либо её вовсе не бывает (если Вы успели изменить эти классы, то для Вас ниже есть вариант 2).

Всё, теперь после набора $this PhpStorm предложит так недостающий ранее db .


То есть, в результате имеем внешнюю библиотеку (CIPS.php) и помеченные как тестовые файлы Controller.php и Model.php в папке system/core.

Пример получившегося CIPS.php можно посмотреть здесь: ссылка.

При добавлении новых моделей стоит не забывать их добавлять в свойства объекта CIPS.

Автозаполнение можно сделать добавив все функции в класс CIPS, например:

class CI_Controller extends CIPS <
public function __construct ( ) < >
/**
* @return CI_Controller
*/
public static function & get_instance ( ) < >
/**
* @return string
*/
public function print_page ( $data = null ) < >
>

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

Вариант 2.

В этом варианте уже нет никаких внешних библиотек, все изменения вносятся непременно в код проекта.

Здесь объявление класса CIPS не меняется, меняется объявление классов CI_Model и CI_Controller: они будут наследоваться от CIPS уже в папке system/core.

  1. В корень проекта (рядом с index.php), вставляем этот CIPS.php, который уже выглядит так: ссылка.
  2. Подключаем его в index.php (или любой иной файл, который выполняется раньше классов из ядра CodeIgniter):
    include ( 'CIPS.php' ) ;
  3. CI_Model и CI_Controller наследуем от CIPS:
    class CI_Controller extends CIPS <
    .
    >

Всё, теперь автозаполнение и ссылки будут работать с методами, находящимися в системных классах.

Active Records (DB_active_rec.php)

В этом классе проблема автозаполнения заключается в следующем (метод chaining не поюзаешь):


То есть, этот метод (всего таких 42 в этом классе) не отдаёт в return ссылку на нужный объект ( CI_DB_active_record или CI_DB_result ). Это происходит из-за некорректного описания функции:

/**
* From
*
* Generates the FROM portion of the query
*
* @param mixed can be a string or array
* @return object
*/
public function from ( $from )

Решить можно двумя способами:

  1. Убрать весь комментарий или хотя бы строку с @return .
  2. Прописать корректный @return : /**
    * From
    *
    * Generates the FROM portion of the query
    *
    * @param mixed can be a string or array
    * @return CI_DB_active_record
    */
    public function from ( $from )

И да, это придётся проделать с каждым методом в этом классе, которому прописан некорректный @return.

Я нахожусь на Windows 10 x64, и сегодня я хотел установить новую версию XAMPP. Что я сделал, так это удалил свой текущий, а затем удалил PHP из переменных окружения. После этого я скачал XAMPP, как обычно, и установил его вместе с Xdebug, так же, как это работало для меня в течение последних двух лет.

Когда я открыл PhpStorm и пошел установить интерпретатор CLI, я заметил, что он сказал "PHP version: Not installed" и "Debugger: Not installed" (хотя у меня есть исполняемый файл PHP, установленный на C:\xampp\php\php.exe).

После этого я попытался переустановить PhpStorm, как с моими текущими настройками, так и с другими настройками. Но это не помогло.

При проверке версии PHP в командной строке он действительно говорит, что у меня установлена новая версия. Я также могу сделать простое Эхо 'hello'; и напечатать его в браузере на моем localhost. Я не знаю, что с этим делать. Однако отладка внутри PhpStorm не работает, несмотря на то, что на моем PHPinfo установлено, что Xdebug установлен.

После того, как я погуглил вокруг, я не вижу многого, что имеет отношение к тому, что я делаю. Похоже, что все, кто сталкивается с этой проблемой, используют удаленный интерпретатор и mac.

Кто-нибудь знает, что делать с моими настройками, или у вас есть какие-либо предложения о том, как это решить?

  • Windows 10 версия 1903 для 64
  • xampp-windows-x64-7.4.1-0-VC15-установщик
  • PhpStorm 2019.3.1
  • PHP 7.4.1
  • Движок Zend v3.4.0, с Xdebug v2.9.0

1 ответ

Я настроил XDebug (2.2.1) и PHPStorm-IDE (Mac OS X 10.7.5) со стандартным стеком LAMP для Mac OS (Apache 2.2.22, PHP 5.3.15). /etc/php.ini [xdebug] zend_extension=/usr/lib/php/extensions/no-debug-non-zts-20090626/xdebug.so xdebug.file_link_format=txmt://open?url=file://%f&line=%1.

В моем случае Comodo Internet Security (CIS) добавляла php.exe к заблокированным приложениям.

Разблокировка его исправила проблему.

  • PHP 7.4.5 64 NTS
  • Windows 10 1909
  • PhpStorm 2020.1

Похожие вопросы:

Так что я через с Win7 x64 с VS2010 и установлена в IE10 с Win7 предварительного просмотра и ReSharper 6.1. Когда я пытаюсь начать отладку, я получаю следующее: Не удалось подключить отладчик.

PhpStorm не может видеть xdebug, но он установлен. В моем браузере xdebug работает нормально. В чем проблема? Ошибка: Связь с 'xdebug' не была установлена. Проверьте правильность установки. php.ini.

Я установил пробную версию PhpStorm 7 на свой Windows 7 64 bit . Php Storm установлен в C:\Program Files (x86)\JetBrains\PhpStorm 7.0\bin\PhpStorm.exe и мой Xampp сервер в E:\xampp. я иду, чтобы.

У меня есть скрипт NodeJS, который предназначен для выполнения в командной строке, ala a shell script. Я хочу отладить свой скрипт в phpStorm 7, однако отладчик просто сидит там и не отлаживает мой.

Я настроил XDebug (2.2.1) и PHPStorm-IDE (Mac OS X 10.7.5) со стандартным стеком LAMP для Mac OS (Apache 2.2.22, PHP 5.3.15). /etc/php.ini [xdebug].

Как только отладчик (xdebug) включен в phpstorm, вы можете запустить свой сценарий php (без отладки) из phpstorm. Как вы просматриваете вывод скрипта в консоли phpstorms? Я хочу увидеть вывод php до.

Несмотря на пошаговое следование всем учебным пособиям, точки останова и отладка php не работают. Вот мои настройки: PHPStorm 9.0.2, сервер на месте 'C:/Users/hedge/Dev/PHPStorm/gpstudios/dist'.

Я пытаюсь настроить PHPUnit в PhpStorm 2017.1 на Windows 10, используя поле Vagrant для проекта Laravel. Я установил удаленный переводчик и пользуюсь им уже пару месяцев, все работает нормально.

У меня есть проблема с отладкой PHP с PhpStorm. У меня есть контейнер, и он работает под управлением Ubuntu 18.04.2 LTS, а моя хост-машина-macOS 10.14.5. Я добавил конфигурацию в PhpStorm, но точка.

PHP 7.2 Отладчик xdebug 2.7 Apache/2.4.38 PhpStorm 2018.1.4 Mac OS Mojave проект локально установлен помощник Xdebug в Firefox Я не могу отладить код. Код останавливается на первой строке. Когда я.

Добрый день. Использую такую программу:

Эта программа записывает в текстовый файл русскую букву "А". Затем я открываю этот файл в браузере (Яндексе, IE) и буква искажена. То есть проблема с кодировкой.

Если же я открою текстовый файл вручную в блокноте и перепечатаю букву "А", то в браузере уже нет искажения.

Скажите, что нужно сделать, чтобы PhpStorm не искажал русский текст.

Да он и не искажает ничего. Что ты запросил, то он и выдал. Просто тебе нужно с кодировками разобраться.

Для начала: какая кодировка у твоего скрипта пхп?

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

Я не знаю, какая кодировка у моего скрипта, я не настраивал кодировок. Просто создал файл в PhpStormе, записал туда код и всё.

Сейчас поэкспериментировал. Наверное, PhpStorm здесь не виноват, т.к. я открыл php-файл в блокноте, напечатал там русскую букву и она исказилась в браузере.

Если же русскую букву брать не из текста кода, а из текстового файла, то русская буква не искажается.

Получается, что в php-файле нельзя писать русский текст в некоторых случаях? Например для txt-файлов? Т.к. в html-файле можно задать метатег и русский текст отображается правильно.

Справа внизу установи кодировку UTF-8 в PHPStorm (кодировка файла), помимо этого в самом скрипте так же пропиши кодировку UTF-8 через header(); Не забудь ранее вывод ошибок включить через error_reporting. Должно быть лучше.

Я сейчас обратил внимание на следующее. Оказывается браузеры не понимают, что у txt-файла кодировка UTF-8 и применяют кодировку Windows 1251.

Интересно можно ли как-то сказать браузеру, что у txt-файла кодировка такая-то?
Или такое только у html-файлов возможно с помощью соответствующего метатега?

У меня сейчас программа создает txt-файл (файл с расширением "txt") и этот txt-файл находится на хостинге. Я дал юзеру ссылку на этот файл и юзер открывает файл через браузер.

Я вот подумал. Может быть сделать еще одну программу. Юзеру дать ссылку на эту программу. Юзер запустит эту программу и уже эта программа даст юзеру в браузер txt-файл. В этом случае может быть тогда можно применить функцию header()?

Как такое можно сделать? С чего начать?

пропиши, одно из значений, в файл который выводит текст в браузер.

можно ещё вот так попробовать записать текст. который будет в кириллице.

Kusss, у меня текстовый файл сам по себе. Программа в него записывает данные, но не отображает текстовый файл в браузере.
Текстовый файл просто лежит на диске в интернете и я дал юзеру ссылку на него.

Вот такая программа переходит в txt-файл, но браузер кодировку не использует из функции header():
<?php

Настройка синхронизации файлов сервера с локальными через PHPStorm

Автоматическая загрузка измененных файлов на сервер - очень удобная опция PHPStorm. О том как ее настроить и пойдет речь в данной статье.
Если вы еще не настроили себе виртуальную машину и не создали Drupal проект, то можете ознакомиться с тем как это сделать

Настройки, которые будут приведены ниже предполагают что у Вас уже настроен сервер, на нем находятся файлы проекта и установлен PHPStorm.

Содержание

Создание нового соединения с удаленным сервером

Настройки синхронизации файлов сервера с локальными

phpstorm_deployment_options.jpg

Теперь настроим опции в каких случаях необходимо синхронизировать файлы с сервером. Для этого необходимо перейти на вкладку Tools → Deployment → Options через главное меню и в появившемся окне выставить необходимые параметры

Параметров довольно много, но наибольший интерес представляют следующие опции:

  • Upload changed files automatically to the default server - автоматическая загрузка измененных файлов на сервер с возможными вариантами (загружать всегда, по горячей клавише Ctrl + S, либо не загружать вовсе).
  • Upload external changes означает, что будут закачиваться файлы (папки) не только те, над которыми вы непосредственно ведете работу, но и те, которые, например, были добавлены раньше (и в данный момент на сервере отсутствуют).
  • Warn when uploading over newer file - предупреждать при загрузке более нового файла. В зависимости от выбранного параметра из выпадающего списка, PHPStorm будет выполнять (предлагать) варианты разрешения конфликта. Возможные параметры:
    1. No - выберите эту опцию, если необходимо, чтобы локальные изменения текущего файла всегда перезаписывали файл на удаленном сервере, вне зависимости от того был он до этого изменен или нет.
    2. Compare timestamp and size - в этом случае PHPStorm будет выполнять проверку размера локального и удаленного файлов, а также время текущей модификации удаленного файла со временем последней синхронизацией на сервере. Если есть изменения, то появится окно с вариантами: смержить результат, проигнорировать либо переписать.
    3. Compare content - сравнение содержимого локального и удаленного файлов на наличие изменений. Если таковые имеются, как и во втором варианте, будет предложены пути разрешения конфликта.
  • Notify about remote changes означает, что редактор будет показывать напоминание о том, что имеются различия в файлах. Данная опция доступна если предыдущая настройка была выставлена в Compare timestamp and size, либо в Compare content.

Можно также синхронизироваться вручную, вызвав контекстное меню по нужному файлу (папке) и выбрав пункт Deployment → Sync with Deployed to . . Опции Upload to . и Download from. отвечают за закачку на сервер и скачку с удаленного сервера соответственно.

можно ли установить значение версии PHP, скажем 4.0+ и иметь функции выделения PHPStorm, которые не будут работать со старой версией? Например, для PHP4 это должно выделить static function etc. У меня есть установка PHP на моем компьютере, но я не хочу устанавливать более старую версию PHP для каждого небольшого скрипта, который я должен создать.

Итак, вы хотите выделить все куски кода, которые не будут работать в версии, которую вы пишете, верно? Это можно сделать в:

или в более новых версиях PhpStorm:

enter image description here

затем выберите свою версию, например, 7.0

Это очень полезно, когда ваш местный находится в 7.0, например, но производство находится в 5.5. Таким образом, phpstorm предупредит вас, какие части не будут работать в производстве.

В случае, если ваше поле отключено.

вероятно, ваши настройки " синхронизировать настройки IDE с композитором.формат JSON" включена

вы можете изменить свою версию PHP в

или отключить настройки в этом пути

*Если вы измените свой композитор.файл json - As Феликс Ганьон-Гренье прокомментировал, Имейте в виду, что это влияет на то, как пакеты потребуются позже

откройте диалоговое окно настройки, выбрав Файл | Настройки, нажмите кнопку PHP под Языки И Фреймворки. Откроется страница PHP.

Screenshot of the PHP settings

теперь вы можете сделать 2 вещи:

  1. на открывшейся странице PHP вы можете установить "уровень языка PHP".
  2. вы можете установить версию PHP, которую вы хотите локально, например, установив пакеты, такие как wamp или xamp, а затем установите интерпретатор вашего PHP на странице PHP, которую вы открыли. Подробнее здесь

можно использовать ответ Алехандро Морено, но иногда вы не можете изменить уровень PHP из закрытого раскрывающегося списка.

вы можете отключить " синхронизировать настройки IDE с composer.флажок в JSON" с:

Файл - > Настройки - > языки и фреймворки - > PHP - > Composer

и после применения открытого

Файл - > Настройки - > языки и фреймворки - > PHP

здесь вы можете изменить уровень PHP с открытого раскрывающийся.

на Mac он находится под PHPStorm, предпочтениями, языками и фреймворками, PHP

enter image description here

enter image description here

enter image description here

enter image description here

вы можете установить это для каждого проекта, как это изложено @Alejandro Moreno.

существует также глобальная настройка, которая позволяет установить уровень языка PHP для всех новая проектов.

Файл --> Настройки для новых проектов --> языки и фреймворки --> PHP

здесь вы можете установить желаемый уровень для всех будущих проектов :-)

Читайте также: