Im trying to run Symfony Crawler in my script, but when I try to do that, I get 500 server error. Where is the problem? The code:
use Symfony\Component\DomCrawler\Crawler;
class Yt_downloader
{
private $__parser;
private $__uri;
public function __construct($cfg)
{
$this->__parser = new Crawler();
if ( is_array($cfg) ) {
foreach ( $cfg as $key => $value ) {
$this->{$key} = $value;
}
}
}
public function test()
{
print_r($this->__uri);
}
}
and the action:
require_once APPPATH . 'libraries/Yt_downloader.php';
$downloader = new Yt_downloader(array(
'__uri' => 'https://www.youtube.com/watch?v=...'
));
btw, my composer.json:
{
"name": "project",
"description": "",
"license": "MIT",
"require-dev": {
"symfony/css-selector": "~2.8|~3.0"
},
"suggest": {
"symfony/css-selector": ""
},
"autoload": {
"psr-4": { "Symfony\\Component\\DomCrawler\\": "" }
},
"minimum-stability": "dev",
"extra": {
"branch-alias": {
"dev-master": "3.0-dev"
}
}
}
this is being used in Codeigniter project. I thought it can be composer problem, but when I try to use different library it works. I think there is a problem with namespaces or something. Maybe I can see log anywhere? I use ubuntu..
You need to require
"symfony/dom-crawler": "~2.8|~3.0"
In your composer.json file so that the crawler component is installed
Related
I'm new with namespaces and I'm making tests but when I run app.php I get the next error:
Fatal error: Class 'ProtocoloWT\models\status' not found in
C:\xampp\htdocs\wt.uptkd\protocoloWt\app.php
.
app.php
use Neomerx\JsonApi\Encoder\Encoder;
use Neomerx\JsonApi\Encoder\EncoderOptions;
use ProtocoloWT\models\status;
require '../vendor/autoload.php';
$status = status::instance(http_response_code(204));
$encoder = Encoder::instance([
'\status' => '\statusEsquema',
], new EncoderOptions(JSON_PRETTY_PRINT, 'http://example.com/api/v1'));
echo $encoder->encodeData($status);
status.php
namespace ProtocoloWT\models;
class status
{
public static function instance ($status)
{
$estado = new status();
$estado->status = $status;
return $estado;
}
}
composer.json
{
"name": "neomerx/json-api",
"description": "Framework agnostic JSON API (jsonapi.org) implementation",
"keywords": [
"jsonapi.org",
"json-api",
"jsonapi",
"neomerx",
"json",
"api"
],
"homepage": "https://github.com/neomerx/json-api",
"support": {
"issues": "https://github.com/neomerx/json-api/issues"
},
"license": "Apache-2.0",
"authors": [
{
"name": "neomerx",
"email": "info#neomerx.com"
}
],
"require": {
"php": ">=5.5.0",
"psr/http-message": "^1.0",
"psr/log": "^1.0"
},
"require-dev": {
"phpunit/phpunit": "^4.6 || ^5.0 || ^6.0",
"mockery/mockery": "~0.9.4",
"scrutinizer/ocular": "^1.3",
"squizlabs/php_codesniffer": "^2.5",
"monolog/monolog": "^1.18",
"phpmd/phpmd": "^2.6"
},
"minimum-stability": "stable",
"autoload": {
"psr-4": {
"Neomerx\\JsonApi\\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"Neomerx\\Tests\\JsonApi\\": "tests/",
"Neomerx\\Samples\\JsonApi\\": "sample/"
}
},
"scripts": {
"test": ["#test-unit", "#test-cs", "#test-md"],
"test-unit": "./vendor/phpunit/phpunit/phpunit --coverage-text",
"test-unit-with-coverage": "phpdbg -qrr ./vendor/bin/phpunit --coverage-text",
"test-cs": "./vendor/bin/phpcs -p -s --standard=PSR2 ./src ./tests",
"test-md": "./vendor/bin/phpmd ./src text codesize,controversial,cleancode,design,unusedcode,naming",
"perf-php": "docker-compose run --rm cli_php php /app/sample/sample.php -t=10000",
"perf-hhvm": "docker-compose run --rm cli_hhvm hhvm /app/sample/sample.php -t=10000"
}
}
File app.php is in a directory called protocoloWT/ and status.php is in protocoloWT/models.
I installed a framework with composer and I can use those namespaces (Neomerx\JsonApi), but I can't create my own namespaces in my files because I get that error. What could be the issue?
PS: Sorry for my english, I have tried to explain it the best I can
I have a project to test and play around, with the following structure:
app/
controllers/
HomeController.php
handlers/
models/
vendor/
composer/
psr/
pusher/
pusher-php-server/
src/
Pusher.php
PusherException.php
PusherInstance.php
tests/
composer.json
autoload.php
index.php
I tried to require the Pusher autoloader in my index file:
require 'vendor/autoload.php';
Which is the following:
// autoload.php #generated by Composer
require_once __DIR__ . '/composer/autoload_real.php';
return ComposerAutoloaderInite16b90ab01042d2a69b1d54243c9e23a::getLoader();
Now, in my HomeController.php, I have the following code:
namespace App\controllers;
use \App\handlers\Views as View;
use \App\models\Home_model as Home;
use \App\controllers\SessionController;
use \Pusher\Pusher as Pusher;
class HomeController {
private $pusher;
public function __construct() {
$options = array(
'cluster' => 'hmm',
'encrypted' => true
);
$this->pusher = new Pusher(
'secret',
'secret',
'secret',
$options
);
}
public function index() {
$data['message'] = 'hello world';
$this->pusher->trigger('my-channel', 'my-event', $data);
return $this->view->render('views/home/index.php');
}
}
But this returns me an error:
Fatal error: Class 'Pusher\Pusher' not found in
And I'm not sure what I'm doing wrong. Could someone explain me what I'm doing wrong?
In composer.json I get the following:
{
"name": "pusher/pusher-php-server",
"description" : "Library for interacting with the Pusher REST API",
"keywords": ["php-pusher-server", "pusher", "rest", "realtime", "real-time", "real time", "messaging", "push", "trigger", "publish", "events"],
"license": "MIT",
"require": {
"php": "^5.4 || ^7.0",
"ext-curl": "*",
"psr/log": "^1.0"
},
"require-dev": {
"phpunit/phpunit": "^4.8 || ^5.7"
},
"autoload": {
"psr-4": {
"Pusher\\": "src/"
}
},
"autoload-dev": {
"psr-4": { "": "tests/" }
},
"config": {
"preferred-install": "dist"
},
"extra": {
"branch-alias": {
"dev-master": "3.0-dev"
}
},
"minimum-stability": "dev",
"prefer-stable": true
}
On Github, they mention that the library depends on cURL and JSON modules.
Not realy sure if this has something to do with my issue?
I'm still stuck, so any help is greatly appreciated.
Also, I'm using a .htaccess file, to rewrite my urls.
I have managed your code to work with right composer.json next to index.php:
{
"name": "awesome/project",
"type": "project",
"license": "MIT",
"authors": [
{
"name": "Author",
"email": "author#gmail.com"
}
],
"autoload": {
"psr-4": {
"": ""
}
},
"require": {
"pusher/pusher-php-server": "dev-master"
}
}
Then just run composer install.
My index.php contents:
<?php
require 'vendor/autoload.php';
use app\controllers\HomeController;
$ctrl = new HomeController();
I have setup a folder structure like this for a package of legacy classes
vendorname/legacy/src/ClassA.php
namespace Vendorname\Legacy;
class ClassA{}
vendorname/legacy/src/Folder/Class2.php
namespace Vendorname\Legacy\Folder;
class FolderClass2{}
With composer I'm loading this from a github repo like this:
"repositories": [
{
"type": "vcs",
"url": "git#bitbucket.org:username/vendorname-legacy-classes.git"
}
],
"require": {
"vendorname/legacy": "master#dev"
}
When I load ClassA like this it works:
use Vendorname\Legacy\ClassA;
$a = new ClassA();
However none of my subfolder'd classes work:
use Vendorname\Legacy\Folder\FolderClassB;
$b = new FolderClassB();
Class 'Vendorname\\Legacy\\Folder\\FolderClassB' not found
I have already defined the source folder with a file vendor\vendorname\composer.json
{
"name": "vendorname/legacy",
"description": "Vendorname Legacy classes",
"require": {
"php": ">=5.3.0"
},
"autoload": {
"psr-4": {
"Vendorname\\Legacy\\": "src"
}
},
"extra": {
"branch-alias": {
"master": "master"
}
}
}
you need to define one thing more to your composer.json
{
"autoload": {
"psr-4": {"Vendorname\\Legacy\\": "vendorname/legacy/src/"}
}
}
I am following the directions given here to install neoclient on Windows 7 -
https://github.com/neoxygen/neo4j-neoclient
But I get the error -
<b>Parse error</b>: syntax error, unexpected 'use' (T_USE) in <b>C:\xampp\htdocs\send.php</b> on line <b>7</b><br />
when I try to run the sample php code.
My code is -
<?php
try
{
require_once 'vendor/autoload.php';
use Neoxygen\NeoClient\ClientBuilder;
$client = ClientBuilder::create()
->addConnection('default','http','localhost',7474)
->build();
$version = $client->getNeo4jVersion();
}
catch(Exception $e)
{
echo $e->getMessage();
}
echo $version;
?>
composer.json -
{
"name": "neoxygen/neoclient",
"type": "library",
"description": "NeoClient is the most advanced Http Client for Neo4j",
"keywords": [
"graph",
"neo4j",
"cluster",
"client",
"high-availibility"
],
"homepage": "http://neoxygen.io",
"license": "MIT",
"authors": [
{
"name": "Christophe Willemsen",
"email": "chris#neoxygen.io"
}
],
"require": {
"php": ">= 5.5",
"guzzlehttp/guzzle": "^6.0",
"monolog/monolog": "~1.1",
"symfony/yaml": "^2.7",
"symfony/config": "^2.7",
"symfony/dependency-injection": "^2.7",
"symfony/event-dispatcher": "^2.7",
"graphaware/neo4j-response-formatter": "^1.0"
},
"require-dev": {
"phpspec/phpspec": "~2.0",
"phpunit/phpunit": "4.*",
"bossa/phpspec2-expect": "*",
"behat/behat": "~3.0"
},
"autoload": {
"psr-4": {
"Neoxygen\\NeoClient\\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"Neoxygen\\NeoClient\\Tests\\": "tests/Neoxygen/NeoClient/Tests"
}
},
"extra": {
"branch-alias": {
"dev-master": "3.1-dev"
}
}
}
I'm the maintainer of NeoClient.
I don't think I have ever seen this piece of code somewhere, please point to a link.
Especially, require and use statements should be in the beginning of the file, after the open tag.
Secondly, you don't need to instantiate the client in a try/catch block.
Here is the correct piece of code :
<?php
require_once 'vendor/autoload.php';
use Neoxygen\NeoClient\ClientBuilder;
$client = ClientBuilder::create()
->addConnection('default','http','localhost',7474)
->build();
try
{
$version = $client->getNeo4jVersion();
}
catch(Exception $e)
{
echo $e->getMessage();
}
echo $version;
?>
I have the follow composer.json
{
"name": "mjohnson/transit",
"type": "library",
"description": "A file uploader, validator, importer and transformer library.",
"keywords": [
"transit", "file", "uploader", "validator", "importer", "transformer", "transporter",
"image", "audio", "video", "text", "application", "archive", "s3", "glacier"
],
"homepage": "http://milesj.me/code/php/transit",
"license": "MIT",
"authors": [
{
"name": "Miles Johnson",
"homepage": "http://milesj.me"
}
],
"require": {
"php": ">=5.3.0",
"ext-curl": "*",
"ext-mbstring": "*",
"aws/aws-sdk-php": "2.0.*"
},
"support": {
"source": "https://github.com/milesj/php-transit"
},
"autoload": {
"psr-0": { "Transit": "src/" }
}
}
when I run a composer update the source code is not updated to reflect current repository: https://github.com/milesj/transit
I tried to delete lock file whitout success. Tried composer [update|install}
For instance, my current (local) code:
src/Transit/File.php:
[...]
public function __construct($path) {
if (!file_exists($path)) {
throw new IoException(sprintf('%s does not exist', $path));
}
$this->_path = $path;
}
[...]
current repository code:
[...]
public function __construct($path) {
if (is_array($path)) {
if (empty($path['tmp_name'])) {
throw new IoException('Passing via array must use $_FILES data');
}
$this->_data = $path;
$path = $path['tmp_name'];
}
if (!file_exists($path)) {
throw new IoException(sprintf('%s does not exist', $path));
}
$this->_path = $path;
// #version 1.3.2 Rename file to add ext if ext is missing
if (!$this->ext()) {
$this->rename();
}
// #version 1.4.0 Reset the cache
$this->_cache = array();
}
[...]
You have the wrong composer.json. The one you mention is for the library named "mjohnson/transit" - if you are not developing this exact software, then this is wrong.
You should create a new composer.json file containing at least this line:
{ "require": { "mjohnson/transit" : "*" } }
Then run composer install.
I do not know what you did to get that composer.json file, but if you originally cloned that other repository, and now edit that file, things will break! Backup your code if any. Try to undo what you did wrong without undoing your own code.