PHP Framework Detector
Detect PHP frameworks in any project directory with a modern, async Python tool. Supports 17+ frameworks, structured logging, and a user-friendly CLI.
Features
- Async detection for high performance
- 17+ frameworks supported
- Structured logging (structlog)
- Type safety (Pydantic)
- Modern CLI (Rich)
- Configurable & extensible
Supported Frameworks
Laravel, Symfony, CodeIgniter, CakePHP, Yii, ThinkPHP, Slim, Fuel, Phalcon, Laminas, Zend Framework, Drupal, Drush, Fat-Free, PHPixie, PopPHP, FastRoute
Installation
# Recommended (uv)
uv add php-framework-detector
# Or pip
pip install php-framework-detector
Usage
CLI
php-framework-detector /path/to/php/project [--json] [--all] [--verbose]
php-framework-detector list-frameworks
php-framework-detector version
Docker
docker run --rm -it -v /path/to/php/project:/var/www/html ghcr.io/wangyihang/php-framework-detector:main detect /var/www/html
Python API
import asyncio
from php_framework_detector import FrameworkDetectorFactory, DetectionConfig
async def main():
config = DetectionConfig(timeout=30, max_file_size=1024*1024, verbose=True)
result = await FrameworkDetectorFactory.detect_all_frameworks_async("/path/to/php/project", config)
print(result)
asyncio.run(main())
Configuration Example
from php_framework_detector import DetectionConfig
config = DetectionConfig(
check_composer=True,
check_files=True,
check_dependencies=True,
max_file_size=1024*1024,
timeout=30,
verbose=False
)
Architecture
- FrameworkDetector: Base class for detectors
- FrameworkDetectorFactory: Detector management
- DetectionConfig: Config model
- DetectionResult: Structured results
- Custom Exceptions: Error handling
Detection strategies:
- File pattern matching
- Composer dependency analysis
- Content pattern matching
- Priority-based scoring
Add a New Framework
- Create a detector in
frameworks/:
from ..core.detector import FrameworkDetector
class MyFrameworkDetector(FrameworkDetector):
name = "myframework"
display_name = "My Framework"
def detect(self):
return self._check_path_patterns(["myframework.php"])
async def _detect_async_impl(self):
return 50 if await self._check_path_patterns_async(["myframework.php"]) else 0
- Register it in
frameworks/__init__.py:
from .myframework import MyFrameworkDetector
FrameworkDetectorFactory.register_detector(MyFrameworkDetector)
Development
git clone https://github.com/your-username/php-framework-detector.git
cd php-framework-detector
uv sync
uv sync --extra dev
pytest
black .
isort .
mypy .
ruff check .
Testing
pytest
pytest --cov=php_framework_detector
pytest --asyncio-mode=auto
Contributing
- Fork & branch
- Add features/tests
- Ensure all tests pass
- Submit a pull request
License
MIT License. See LICENSE.
Changelog
v0.2.0
- Refactored, async, structured logging, type safety, improved CLI, error handling, better detection
v0.1.0
- Initial release
Metadata
Release files for php-framework-detector 0.2.16
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| php_framework_detector-0.2.16.tar.gz | 64.5 kB | Without provenance | Details for php_framework_detector-0.2.16.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| php_framework_detector-0.2.16-py3-none-any.whl | Python 3 | none | any | Details for php_framework_detector-0.2.16-py3-none-any.whl |
Total release size: 100.9 kB
Release files / php_framework_detector-0.2.16.tar.gz
| Download URL | php_framework_detector-0.2.16.tar.gz |
|---|---|
| Size | 64.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7fa4d1e8c7d8d126c081e24dfe184bfa4d17eaabff3c43b68d3d1270b2f16899
|
|
BLAKE2b-256 checksum How to use checksums |
794253d7cf44d3a0a4b9da2fa94184695de59a2c41cf436ba853a06aaa6c1ca5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.8.3
|
Release files / php_framework_detector-0.2.16-py3-none-any.whl
| Download URL | php_framework_detector-0.2.16-py3-none-any.whl |
|---|---|
| Size | 36.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f158a61adb1104c888b8c80ba2b16423e3222d49cf55376cc548ffdeea0d59f8
|
|
BLAKE2b-256 checksum How to use checksums |
9fcdc485b8889066bdd242b87801e303f08dfe4b2d60be8f5f98c74cc45ee9e8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.8.3
|
Security for php-framework-detector 0.2.16
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.