| Conditions | 20 |
| Paths | 4608 |
| Total Lines | 257 |
| Code Lines | 165 |
| Lines | 0 |
| Ratio | 0 % |
| Changes | 0 | ||
Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.
For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.
Commonly applied refactorings include:
If many parameters/temporary variables are present:
| 1 | <?php |
||
| 384 | public function __construct() |
||
| 385 | { |
||
| 386 | /* mandatory requirements follow */ |
||
| 387 | |||
| 388 | $installedPhpVersion = phpversion(); |
||
| 389 | |||
| 390 | $this->addRequirement( |
||
| 391 | version_compare($installedPhpVersion, self::REQUIRED_PHP_VERSION, '>='), |
||
| 392 | sprintf('PHP version must be at least %s (%s installed)', self::REQUIRED_PHP_VERSION, $installedPhpVersion), |
||
| 393 | sprintf('You are running PHP version "<strong>%s</strong>", but Symfony needs at least PHP "<strong>%s</strong>" to run. |
||
| 394 | Before using Symfony, upgrade your PHP installation, preferably to the latest version.', |
||
| 395 | $installedPhpVersion, self::REQUIRED_PHP_VERSION), |
||
| 396 | sprintf('Install PHP %s or newer (installed version is %s)', self::REQUIRED_PHP_VERSION, $installedPhpVersion) |
||
| 397 | ); |
||
| 398 | |||
| 399 | $this->addRequirement( |
||
| 400 | version_compare($installedPhpVersion, '5.3.16', '!='), |
||
| 401 | 'PHP version must not be 5.3.16 as Symfony won\'t work properly with it', |
||
| 402 | 'Install PHP 5.3.17 or newer (or downgrade to an earlier PHP version)' |
||
| 403 | ); |
||
| 404 | |||
| 405 | $this->addRequirement( |
||
| 406 | is_dir(__DIR__.'/../vendor/composer'), |
||
| 407 | 'Vendor libraries must be installed', |
||
| 408 | 'Vendor libraries are missing. Install composer following instructions from <a href="http://getcomposer.org/">http://getcomposer.org/</a>. ' . |
||
| 409 | 'Then run "<strong>php composer.phar install</strong>" to install them.' |
||
| 410 | ); |
||
| 411 | |||
| 412 | $baseDir = basename(__DIR__); |
||
| 413 | |||
| 414 | $this->addRequirement( |
||
| 415 | is_writable(__DIR__.'/cache'), |
||
| 416 | "$baseDir/cache/ directory must be writable", |
||
| 417 | "Change the permissions of the \"<strong>$baseDir/cache/</strong>\" directory so that the web server can write into it." |
||
| 418 | ); |
||
| 419 | |||
| 420 | $this->addRequirement( |
||
| 421 | is_writable(__DIR__.'/logs'), |
||
| 422 | "$baseDir/logs/ directory must be writable", |
||
| 423 | "Change the permissions of the \"<strong>$baseDir/logs/</strong>\" directory so that the web server can write into it." |
||
| 424 | ); |
||
| 425 | |||
| 426 | $this->addPhpIniRequirement( |
||
| 427 | 'date.timezone', true, false, |
||
| 428 | 'date.timezone setting must be set', |
||
| 429 | 'Set the "<strong>date.timezone</strong>" setting in php.ini<a href="#phpini">*</a> (like Europe/Paris).' |
||
| 430 | ); |
||
| 431 | |||
| 432 | if (version_compare($installedPhpVersion, self::REQUIRED_PHP_VERSION, '>=')) { |
||
| 433 | $this->addRequirement( |
||
| 434 | (in_array(date_default_timezone_get(), DateTimeZone::listIdentifiers())), |
||
| 435 | sprintf('Configured default timezone "%s" must be supported by your installation of PHP', date_default_timezone_get()), |
||
| 436 | 'Your default timezone is not supported by PHP. Check for typos in your <strong>php.ini</strong> file and have a look at the list of deprecated timezones at <a href="http://php.net/manual/en/timezones.others.php">http://php.net/manual/en/timezones.others.php</a>.' |
||
| 437 | ); |
||
| 438 | } |
||
| 439 | |||
| 440 | $this->addRequirement( |
||
| 441 | function_exists('json_encode'), |
||
| 442 | 'json_encode() must be available', |
||
| 443 | 'Install and enable the <strong>JSON</strong> extension.' |
||
| 444 | ); |
||
| 445 | |||
| 446 | $this->addRequirement( |
||
| 447 | function_exists('session_start'), |
||
| 448 | 'session_start() must be available', |
||
| 449 | 'Install and enable the <strong>session</strong> extension.' |
||
| 450 | ); |
||
| 451 | |||
| 452 | $this->addRequirement( |
||
| 453 | function_exists('ctype_alpha'), |
||
| 454 | 'ctype_alpha() must be available', |
||
| 455 | 'Install and enable the <strong>ctype</strong> extension.' |
||
| 456 | ); |
||
| 457 | |||
| 458 | $this->addRequirement( |
||
| 459 | function_exists('token_get_all'), |
||
| 460 | 'token_get_all() must be available', |
||
| 461 | 'Install and enable the <strong>Tokenizer</strong> extension.' |
||
| 462 | ); |
||
| 463 | |||
| 464 | $this->addRequirement( |
||
| 465 | function_exists('simplexml_import_dom'), |
||
| 466 | 'simplexml_import_dom() must be available', |
||
| 467 | 'Install and enable the <strong>SimpleXML</strong> extension.' |
||
| 468 | ); |
||
| 469 | |||
| 470 | if (function_exists('apc_store') && ini_get('apc.enabled')) { |
||
| 471 | $this->addRequirement( |
||
| 472 | version_compare(phpversion('apc'), '3.0.17', '>='), |
||
| 473 | 'APC version must be at least 3.0.17', |
||
| 474 | 'Upgrade your <strong>APC</strong> extension (3.0.17+).' |
||
| 475 | ); |
||
| 476 | } |
||
| 477 | |||
| 478 | $this->addPhpIniRequirement('detect_unicode', false); |
||
| 479 | |||
| 480 | ob_start(); |
||
| 481 | phpinfo(); |
||
| 482 | $phpinfo = ob_get_contents(); |
||
| 483 | ob_end_clean(); |
||
| 484 | |||
| 485 | // the phpinfo check is necessary when Suhosin is compiled into PHP |
||
| 486 | if (extension_loaded('suhosin') || false !== strpos($phpinfo, 'Suhosin')) { |
||
| 487 | $this->addPhpIniRequirement( |
||
| 488 | 'suhosin.executor.include.whitelist', |
||
| 489 | create_function('$cfgValue', 'return false !== stripos($cfgValue, "phar");'), |
||
| 490 | false, |
||
| 491 | 'suhosin.executor.include.whitelist must be configured correctly in php.ini', |
||
| 492 | 'Add "<strong>phar</strong>" to <strong>suhosin.executor.include.whitelist</strong> in php.ini<a href="#phpini">*</a>.' |
||
| 493 | ); |
||
| 494 | } |
||
| 495 | |||
| 496 | if (extension_loaded('xdebug')) { |
||
| 497 | $this->addPhpIniRequirement( |
||
| 498 | 'xdebug.show_exception_trace', false, true |
||
| 499 | ); |
||
| 500 | |||
| 501 | $this->addPhpIniRequirement( |
||
| 502 | 'xdebug.scream', false, true |
||
| 503 | ); |
||
| 504 | } |
||
| 505 | |||
| 506 | $pcreVersion = defined('PCRE_VERSION') ? (float) PCRE_VERSION : null; |
||
| 507 | |||
| 508 | $this->addRequirement( |
||
| 509 | null !== $pcreVersion && $pcreVersion > 8.0, |
||
| 510 | sprintf('PCRE extension must be available and at least 8.0 (%s installed)', $pcreVersion ? $pcreVersion : 'not'), |
||
| 511 | 'Upgrade your <strong>PCRE</strong> extension (8.0+).' |
||
| 512 | ); |
||
| 513 | |||
| 514 | /* optional recommendations follow */ |
||
| 515 | |||
| 516 | $this->addRecommendation( |
||
| 517 | file_get_contents(__FILE__) === file_get_contents(__DIR__.'/../vendor/sensio/distribution-bundle/Sensio/Bundle/DistributionBundle/Resources/skeleton/app/SymfonyRequirements.php'), |
||
| 518 | 'Requirements file should be up-to-date', |
||
| 519 | 'Your requirements file is outdated. Run composer install and re-check your configuration.' |
||
| 520 | ); |
||
| 521 | |||
| 522 | $this->addRecommendation( |
||
| 523 | version_compare($installedPhpVersion, '5.3.4', '>='), |
||
| 524 | 'You should use at least PHP 5.3.4 due to PHP bug #52083 in earlier versions', |
||
| 525 | 'Your project might malfunction randomly due to PHP bug #52083 ("Notice: Trying to get property of non-object"). Install PHP 5.3.4 or newer.' |
||
| 526 | ); |
||
| 527 | |||
| 528 | $this->addRecommendation( |
||
| 529 | version_compare($installedPhpVersion, '5.3.8', '>='), |
||
| 530 | 'When using annotations you should have at least PHP 5.3.8 due to PHP bug #55156', |
||
| 531 | 'Install PHP 5.3.8 or newer if your project uses annotations.' |
||
| 532 | ); |
||
| 533 | |||
| 534 | $this->addRecommendation( |
||
| 535 | version_compare($installedPhpVersion, '5.4.0', '!='), |
||
| 536 | 'You should not use PHP 5.4.0 due to the PHP bug #61453', |
||
| 537 | 'Your project might not work properly due to the PHP bug #61453 ("Cannot dump definitions which have method calls"). Install PHP 5.4.1 or newer.' |
||
| 538 | ); |
||
| 539 | |||
| 540 | $this->addRecommendation( |
||
| 541 | class_exists('DomDocument'), |
||
| 542 | 'PHP-XML module should be installed', |
||
| 543 | 'Install and enable the <strong>PHP-XML</strong> module.' |
||
| 544 | ); |
||
| 545 | |||
| 546 | $this->addRecommendation( |
||
| 547 | function_exists('mb_strlen'), |
||
| 548 | 'mb_strlen() should be available', |
||
| 549 | 'Install and enable the <strong>mbstring</strong> extension.' |
||
| 550 | ); |
||
| 551 | |||
| 552 | $this->addRecommendation( |
||
| 553 | function_exists('iconv'), |
||
| 554 | 'iconv() should be available', |
||
| 555 | 'Install and enable the <strong>iconv</strong> extension.' |
||
| 556 | ); |
||
| 557 | |||
| 558 | $this->addRecommendation( |
||
| 559 | function_exists('utf8_decode'), |
||
| 560 | 'utf8_decode() should be available', |
||
| 561 | 'Install and enable the <strong>XML</strong> extension.' |
||
| 562 | ); |
||
| 563 | |||
| 564 | if (!defined('PHP_WINDOWS_VERSION_BUILD')) { |
||
| 565 | $this->addRecommendation( |
||
| 566 | function_exists('posix_isatty'), |
||
| 567 | 'posix_isatty() should be available', |
||
| 568 | 'Install and enable the <strong>php_posix</strong> extension (used to colorize the CLI output).' |
||
| 569 | ); |
||
| 570 | } |
||
| 571 | |||
| 572 | $this->addRecommendation( |
||
| 573 | class_exists('Locale'), |
||
| 574 | 'intl extension should be available', |
||
| 575 | 'Install and enable the <strong>intl</strong> extension (used for validators).' |
||
| 576 | ); |
||
| 577 | |||
| 578 | if (class_exists('Collator')) { |
||
| 579 | $this->addRecommendation( |
||
| 580 | null !== new Collator('fr_FR'), |
||
| 581 | 'intl extension should be correctly configured', |
||
| 582 | 'The intl extension does not behave properly. This problem is typical on PHP 5.3.X x64 WIN builds.' |
||
| 583 | ); |
||
| 584 | } |
||
| 585 | |||
| 586 | if (class_exists('Locale')) { |
||
| 587 | if (defined('INTL_ICU_VERSION')) { |
||
| 588 | $version = INTL_ICU_VERSION; |
||
| 589 | } else { |
||
| 590 | $reflector = new ReflectionExtension('intl'); |
||
| 591 | |||
| 592 | ob_start(); |
||
| 593 | $reflector->info(); |
||
| 594 | $output = strip_tags(ob_get_clean()); |
||
| 595 | |||
| 596 | preg_match('/^ICU version +(?:=> )?(.*)$/m', $output, $matches); |
||
| 597 | $version = $matches[1]; |
||
| 598 | } |
||
| 599 | |||
| 600 | $this->addRecommendation( |
||
| 601 | version_compare($version, '4.0', '>='), |
||
| 602 | 'intl ICU version should be at least 4+', |
||
| 603 | 'Upgrade your <strong>intl</strong> extension with a newer ICU version (4+).' |
||
| 604 | ); |
||
| 605 | } |
||
| 606 | |||
| 607 | $accelerator = |
||
| 608 | (function_exists('apc_store') && ini_get('apc.enabled')) |
||
| 609 | || |
||
| 610 | function_exists('eaccelerator_put') && ini_get('eaccelerator.enable') |
||
| 611 | || |
||
| 612 | function_exists('xcache_set') |
||
| 613 | ; |
||
| 614 | |||
| 615 | $this->addRecommendation( |
||
| 616 | $accelerator, |
||
| 617 | 'a PHP accelerator should be installed', |
||
| 618 | 'Install and enable a <strong>PHP accelerator</strong> like APC (highly recommended).' |
||
| 619 | ); |
||
| 620 | |||
| 621 | $this->addPhpIniRecommendation('short_open_tag', false); |
||
| 622 | |||
| 623 | $this->addPhpIniRecommendation('magic_quotes_gpc', false, true); |
||
| 624 | |||
| 625 | $this->addPhpIniRecommendation('register_globals', false, true); |
||
| 626 | |||
| 627 | $this->addPhpIniRecommendation('session.auto_start', false); |
||
| 628 | |||
| 629 | $this->addRecommendation( |
||
| 630 | class_exists('PDO'), |
||
| 631 | 'PDO should be installed', |
||
| 632 | 'Install <strong>PDO</strong> (mandatory for Doctrine).' |
||
| 633 | ); |
||
| 634 | |||
| 635 | if (class_exists('PDO')) { |
||
| 636 | $drivers = PDO::getAvailableDrivers(); |
||
| 637 | $this->addRecommendation( |
||
| 638 | count($drivers), |
||
| 639 | sprintf('PDO should have some drivers installed (currently available: %s)', count($drivers) ? implode(', ', $drivers) : 'none'), |
||
| 640 | 'Install <strong>PDO drivers</strong> (mandatory for Doctrine).' |
||
| 641 | ); |
||
| 645 |