I've tried using pear to install both phpunit and phpdoc and seem to be running into a problem with my pear installation.
following the installation guide here :
You can prepare your PEAR installation using the following commands: $ pear channel-discover pear.phpdoc.org
this gives me an error message:
-bash: pear: command not found
I've seen mention of using $ locate bin/pear to find the installation. This gives me the following message:
WARNING: The locate database (/var/db/locate.database) does not exist.
To create the database, run the following command:
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist
Please be aware that the database can take some time to generate; once
the database has been created, this message will no longer appear.
Not sure what that means, but if I'm reading it correctly, it's saying that pear isn't there. I know my path to pear is /Applications/MAMP/bin/php/php5.3.6/bin/pear /Applications/MAMP/bin/php/php5.3.6/bin/pear.
I'm a little lost on what to try next. Any suggestions on what I'm doing wrong?
Create your locate database using the command given. You can think of this in terms of the way spotlight has to "load" or index everything when you first install osx. 'can take some time' usually means 'will take some time'
If you know your pear path you can execute it directly:
/Applications/MAMP/bin/php/php5.3.6/bin/pear channel-discover pear.phpdoc.org
or add an alias to it manually in your bash profile directory
http://blog.elucidcode.com/2011/03/terminal-aliases-in-os-x/
or make a link to it in /usr/bin.
For an overview. It seems pear is installed fine. Just when you type in 'pear' into the console osx doesn't recognize that as being a command, Its like a shortcut on your desktop that doesn't point to anywhere. What needs to be done (using one of the methods above) is to point the "desktop shortcut" (the pear command) to the actually pear binary.
Try using the full path to pear:
$ /Applications/MAMP/bin/php/php5.3.6/bin/pear channel-discover pear.phpdoc.org
When you enter a unix command like that, the first part is the application that you want to run. Typing "pear" means you want to run the pear app. Your OS knows a few directories in which to look for applications. You can see what they are by entering the command:
echo $PATH
The list is separated by colons. If the application you want to run is not in one of those folders, then your OS doesn't know where to find it. It won't automatically search your entire hard drive to find an application of that name. That would be a security risk, or at the least slow and ambiguous if you have more than one app with the same name.
If you enter the entire path to your application, like I've suggested above, then your OS knows exactly where to find the application and will run it directly without searching through the directories in your PATH.
You can add new directories to your PATH and you can add an alias to an application to one of the PATH directories. Then you would be able to just type "pear" and the OS could find it. There are tutorials for adding directories to your PATH all over the internet.
The locate database needs to be created in order to use the locate command. This is a separate issue. You can build the locate database and it will look over all of your files. It will take a little while to run, but when it's done the locate command will work. However, since you already know where your pear app is, locate won't give you any new information.
Related
This might be a very newbie question but, how exactly do you use phpDocumentor to generate your docs through Laravel? In my Laravel project there's no phpdoc in the vendor/bin directory, and trying to install phpDocumentor via composer fails (as suggested on the GitHub page).
I couldn't find any recent resources about it, the only thing I had luck with is running the phpDocumentor.phar file from the terminal, but the newest version fails immediately.
To get this working, downgrade to PHP 7.1. Then download the latest phpDocumentor.phar file from [http://www.phpdoc.org/phpDocumentor.phar]. Place the phpDocumentor.phar into your Laravel 6.x project's /vendor/bin/ directory.
Then use Homebrew to install other needed packages...
brew install intltool
brew install graphviz
Lastly, cd into /vendor/bin and run...
php phpDocumentor.phar -d ../../app/Http/Controllers
Your documentation output should be at /vendor/bin/output.
Adding a more complete solution that worked for me on creating documentation of my Laravel project with the system environment comprising of MacOS Catalina,Laravel 6 and PHP 7.2.
Visit https://docs.phpdoc.org/3.0/guide/getting-started/installing.html. To install the dependencies, recommended to update homebrew as brew update and brew upgrade. After updating the homebrew, execute the following:
brew install graphviz
brew install plantuml
Once the dependencies are installed, download the phpDocumentor.phar from the above link, and make the file executable as follows:
chmod +x phpDocumentor.phar
Then, copy and paste this file to your laravel app under /vendor/bin
I also placed this file under local bin mv phpDocumentor.phar /usr/local/bin/phpDocumentor for easier access (as shown in step 6 below).
For testing purpose, create a simple test.php file under /vendor/bin/docs/test.php directory with the following content as mentioned in https://docs.phpdoc.org/3.0/guide/getting-started/your-first-set-of-documentation.html
<?php
/**
* This is a DocBlock.
*/
function associatedFunction()
{
}
Then execute the phpdoc script from the same /vendor/bin location as:
phpDocumentor.phar -d docs/test.php -t docs/test
This will generate several files.
Open the index.html file generated in your web browser (eg. Chrome) to view the documentation:
open -a "Google Chrome" ./docs/test/index.html
Notably, because we placed the phpDocumentor.phar in /usr/local/bin/phpDocumentor/phpDocumentor.phar, we can easily access phpdoc and easily create the documentation of our whole App as follows ( the documentation will be stored inside the folder DOCS)
phpDocumentor.phar -d app/ -t DOCS/
I have found the problem with most PHP documentation solutions is they require large amounts of code just to get something you can actually use. And that takes a lot of time and trial and error to set up.
I also have issues with the generated documentation. Often it is not even sorted! Also it is hard to navigate and understand the whole class. As a consumer of a class, you are not interested in private or even protected things (unless you are trying to extend it). But often the docs only show you the methods and properties of the current class, and not what it inherits (which is the WHOLE point of OO!).
Anyway, I got sick of the current state of PHP documentation and decided to do it right. I wrote PHPFUI/InstaDoc to address all the issues I had with existing solutions. InstaDoc is the fastest document generator out there because it simply scans the class directory structure and saves it off. This generally only takes a few seconds (for large code bases) each time you generate (on release, or if you add a new class in your dev env). Then it renders the docs for a specific class at runtime, because, hey, who ever looks at the documentation anyway? Just us nerds, and there are not many of us, and we can wait a fraction of a second for the server to generate the docs on the fly. Also you don't need server disk space to store all your docs. They are generated on the fly. And of course if you have a high volume site, InstaDoc can generate static HTML files, but who has a high volume PHP doc site (like nobody).
Anyway, check out a live example at PHPFUI/InstaDoc and see if it fits your needs. It is not a Laravel module or plug in, but you should be able to run it under Laravel easily. Just return the output of the controller in your controller, and it should just work.
I'm using ubuntu 14.04, attempting to build and install php 5.3.22. I am unable to build as when I enter 'make' I get:
make: *** No targets specified and no makefile found. Stop.
Doing some research, it means that there is no Makefile, which should have been created when I ran ./configure. I got no error or feedback when running ./configure, nor do I get anything when I run ./configure --help. I'm in the correct build directory, otherwise I would get 'command not found?'
Other solutions suggest running autogen.sh, but I think that's only when you are building from a repo.
I also read that there should be a Makefile.in file somewhere, but I do not see that in the directory.
I just want to be able to properly configure and get a generated Makefile so I can build.
To generate the configure script, try running ./buildconf --force. I've not done this myself but got this by looking at the source repo and a couple of Google searches.
Before you can build PHP you first need to obtain its source code. There are two ways to do this: You can either download an archive from PHP’s download page or clone the git repository from git.php.net (or the mirror on Github).
The build process is slightly different for both cases: The git repository doesn’t bundle a configure script, so you’ll need to generate it using the buildconf script, which makes use of autoconf. Furthermore the git repository does not contain a pregenerated parser, so you’ll also need to have bison installed.
PHP Internals Book
I'm trying to fix a bug in a more complex PEAR package (CodeCoverage). So I'd like to have the development version that exists not within my PEAR path:
c:\Programme\PHP\PEAR\PHP
with one on another location, here exemplary:
c:\Dokumente und Einstellungen\hakre\PhpstormProjects\php-code-coverage\PHP\
Is there a common way in PEAR to temporarily switch from the installed package to just the files on another location of the disk?
I tried with placing a symbolic link, but that does not work because I need to link CodeCoverage.php as well which is not possible on Windows XP.
Is there some kind of development switch for this kind of scenario in PEAR or is it just that it's the business of each package to take care of that?
I'm using the CodeCoverage package together with PHPUnit.
I could get it to work by adding it to PHP's include path before the PEAR dir:
include_path = ".;c:\path\to\php-code-coverage;C:\programme\php\pear"
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Invoking PHPUnit now uses the standard package but the development version of CodeCoverage. No symbolic linking required, editing php.ini is enough.
The "Contributing" section of the PHPUnit github project has a runner script included to make that task easier for you.
You can ether check out all the repositories from there or, if you only need one, still use the runner script:
#!/bin/bash
php -d include_path='.:../phpunit/:../dbunit/:../php-code-coverage/:../php-file-iterator/:../php-invoker/:../php-text-template/:../php-timer:../php-token-stream:../phpunit-mock-objects/:../phpunit-selenium/:../phpunit-story/:/usr/local/lib/php' ../phpunit/phpunit.php $*
(intentially not formatted as code so the whole thing is shown)
You can adapt the pathes to an absolute one by replacing .. with /path/to/your/dev/folder/ and put the script in /usr/local/bin/ and call it phpunit-dev.
Then it will automatically pick up all the existing folders and fall back to the pear path at the end for everything it can't find.
Another way to get a dev setup quickly would be to install it from composer with minimum-stability: dev and change the remote on one of the repos :)
I currently have Magento set up on a development server (remote, SSH access) and production server (Cloud instance, SSH access). The current set up is a subversion export to update the development/production servers. This works swell.
If I SSH into the dev server, I can navigate to the Mage root directory and run the following command:
./mage install community Namespace_Module
This works well on the dev server. However, when I navigate to my local path (on my machine, where I've svn co'd Magento), running the mage tool always chokes when a channel is involved. As an example, I tried:
./mage download community Namespace_Module
And received the following response:
Error:
download: Uri doesn't contain host part
I don't understand why this error occurs. I have looked into the mage tool's code and found that the error occurs when the channel URL is malformed. (The mage tool is basically a PHP script, and it uses parse_url to separate the channel URL into the appropriate parts for processing.) However, I am absolutely certain that the setup is identical locally, as it's all in svn, and I have tried many iterations of channels in an attempt to make it work locally.
The ultimate goal of all of this is to be able to run the ./mage tool to install modules on the local system, and commit them to svn from there. Ideally, running an svn status command should show me all the files that would be added/modified during the installation of the module.
Anyone have any ideas as to why this might be happening and how to make it run locally? Thanks!
UPDATE
For anyone wondering, the way I handled this was using the old pear command line tool, then running svn status to extract the downloaded package pieces into the way our systems are organized. It's definitely not ideal and I am still eagerly hoping to get an answer to my original question, but it's the ugly and painful workaround I'm using in the interim.
You should check whether you have all necessary php extentions installed localy.
Missing php5-curl might be the problem.
As you have gotten the code from another server, you might need to reinit things using:
./mage mage-setup
You could also try:
./mage channel-add http://connect20.magentocommerce.com/community
I am new to Linux and I am attempting to install the PHP PEAR library on a virtual server which is running Ubuntu. I am following a tutorial that covers installing PEAR but have run up against an area where I am confused. When running the PEAR installation program I am prompted as to what I want the INSTALL_PREFIX to be. Evidently the INSTALL_PREFIX, among other things, determines where PEAR will be installed. The tutorial suggest the value of INSTALL_PREFIX be the following path ...
"/home/MY_USER_NAME/pear"
where MY_USER_NAME = my user account
Having come from a Windows world, applications are installed on the system where everyone can use them. If I install PEAR underneath my user directory will other developers on the system be able to make use of PEAR in their PHP scripts? I want to make PEAR available to all users and not just myself.
Could someone explain to me the difference between installing for all users and installing just for myself? Does the install location matter? Should I be installing PEAR in a different location?
Thanks for any suggestions.
P.S. The tutorial I am following is located at the following URL ...
http://articles.sitepoint.com/article/getting-started-with-pear/2
Amend your INSTALL_PREFIX...
typically PEAR gets installed to /usr/share/php/
Have you read through the install section on the PEAR site?
There is no law against giving others access to your home directory but in practice it is never done. If you wanted to do that you would have to set the correct directory permissions and the other users would need to put your stuff on their PATH. But don't, it's bad if only because others can see all your stuff, accidentally (or maliciously) delete things, etc.
You should read a few things on file system standards and file system hierarchy and figure out what is appropriate for you system. Usually it will be something like /opt or /usr/local which will be accessible to all users. Usually you will need to have root permissions to install in global locations.