dnoegel / php-xdg-base-dir Goto Github PK
View Code? Open in Web Editor NEWLicense: MIT License
License: MIT License
I originally noticed (and reported) this issue in PsySh. The original issue: bobthecow/psysh#382
So basically, Xdg isn't getting the home directory correctly:
getHomeDir: /
getHomeConfigDir: //.config
getHomeDataDir: //.local/share
getConfigDirs: Array ( [0] => //.config [1] => /etc/xdg )
getDataDirs: Array ( [0] => //.local/share [1] => /usr/local/share [2] => /usr/share )
getHomeCacheDir: //.cache
This is on a CentOS 6.9 machine. Tested it on my MacBook and it works just as expected.
Any ideas?
Hi,
i wanted to run phpunit in my laravel 5.8 project and saw that this library doesn't support PhpUnit 7. I'm using "phpunit/phpunit": "^7.5"
at the moment.
Here's a related comment describing the problem.
symfony/symfony#21816 (comment)
Are there any plans to update the unit test to be compatible with 7.5 ?
Stack
vagrant@alpha-api:~/code$ phpunit .
PHP Fatal error: Uncaught Error: Class 'PHPUnit_Framework_TestCase' not found in /home/vagrant/code/vendor/dnoegel/php-xdg-base-dir/tests/XdgTest.php:3
Stack trace:
#0 /home/vagrant/code/vendor/phpunit/phpunit/src/Util/FileLoader.php(57): include_once()
#1 /home/vagrant/code/vendor/phpunit/phpunit/src/Util/FileLoader.php(45): PHPUnit\Util\FileLoader::load('/home/vagrant/c...')
#2 /home/vagrant/code/vendor/phpunit/phpunit/src/Framework/TestSuite.php(540): PHPUnit\Util\FileLoader::checkAndLoad('/home/vagrant/c...')
#3 /home/vagrant/code/vendor/phpunit/phpunit/src/Framework/TestSuite.php(618): PHPUnit\Framework\TestSuite->addTestFile('/home/vagrant/c...')
#4 /home/vagrant/code/vendor/phpunit/phpunit/src/Runner/BaseTestRunner.php(70): PHPUnit\Framework\TestSuite->addTestFiles(Array)
#5 /home/vagrant/code/vendor/phpunit/phpunit/src/TextUI/Command.php(183): PHPUnit\Runner\BaseTestRunner->getTest('.', '', Array)
#6 /home/vagrant/code/vendor/phpunit/phpunit/src/TextUI/Command.php(162): PHPUnit\TextUI\Command->run(Array, true)
#7 /hom in /home/vagrant/code/vendor/dnoegel/php-xdg-base-dir/tests/XdgTest.php on line 3
Fatal error: Uncaught Error: Class 'PHPUnit_Framework_TestCase' not found in /home/vagrant/code/vendor/dnoegel/php-xdg-base-dir/tests/XdgTest.php:3
Stack trace:
#0 /home/vagrant/code/vendor/phpunit/phpunit/src/Util/FileLoader.php(57): include_once()
#1 /home/vagrant/code/vendor/phpunit/phpunit/src/Util/FileLoader.php(45): PHPUnit\Util\FileLoader::load('/home/vagrant/c...')
#2 /home/vagrant/code/vendor/phpunit/phpunit/src/Framework/TestSuite.php(540): PHPUnit\Util\FileLoader::checkAndLoad('/home/vagrant/c...')
#3 /home/vagrant/code/vendor/phpunit/phpunit/src/Framework/TestSuite.php(618): PHPUnit\Framework\TestSuite->addTestFile('/home/vagrant/c...')
#4 /home/vagrant/code/vendor/phpunit/phpunit/src/Runner/BaseTestRunner.php(70): PHPUnit\Framework\TestSuite->addTestFiles(Array)
#5 /home/vagrant/code/vendor/phpunit/phpunit/src/TextUI/Command.php(183): PHPUnit\Runner\BaseTestRunner->getTest('.', '', Array)
#6 /home/vagrant/code/vendor/phpunit/phpunit/src/TextUI/Command.php(162): PHPUnit\TextUI\Command->run(Array, true)
#7 /hom in /home/vagrant/code/vendor/dnoegel/php-xdg-base-dir/tests/XdgTest.php on line 3
The getConfigDirs
and getDataDirs
methods are useful for looking up a file, but it would be nice if the library also provided a getConfigFile($relativePath)
(and similar for data/cache/runtime files) that would walk the directory list and return the full path to the first one found, or null if none of the directories include the file).
I don't like how an "invalid" runtime directory is unliked
at the moment (https://github.com/dnoegel/php-xdg-base-dir/blob/master/src/Xdg.php#L105).
Instead I would like to throw an exception like throw new RuntimeException('Unsecure Runtime dir')
.
See also this example: https://github.com/o11c/rust-xdg/blob/master/src/xdg.rs#L52
public function getRuntimeDir($strict=true)
could become public function getRuntimeDir($create = true, $forceSecure = true)
.
Feedback welcome.
I'm assuming this is licensed under the MIT license (based off of the composer.json file), but including the full license text with a copyright line (e.g., here) helps clear up the legal standing of this code.
I'm trying to use psysh which uses 0.1
of this library and each time I run it I get:
PHP Warning: rmdir(/var/folders/.../T/php-xdg-runtime-dir-fallback-mschinkel): Directory not empty in phar:///usr/local/bin/psysh/build-vendor/dnoegel/php-xdg-base-dir/src/Xdg.php on line 110
PHP Stack trace:
PHP 1. {main}() /usr/local/bin/psysh:0
PHP 2. Psy\{closure}() /usr/local/bin/psysh:141
PHP 3. Psy\Shell->run() phar:///usr/local/bin/psysh/src/Psy/functions.php:325
PHP 4. Psy\Shell->initializeTabCompletion() phar:///usr/local/bin/psysh/src/Psy/Shell.php:247
PHP 5. Psy\Shell->addTabCompletionMatchers() phar:///usr/local/bin/psysh/src/Psy/Shell.php:990
PHP 6. Psy\Shell->getTabCompletionMatchers() phar:///usr/local/bin/psysh/src/Psy/Shell.php:224
PHP 7. Psy\Shell->all() phar:///usr/local/bin/psysh/src/Psy/Shell.php:200
PHP 8. Psy\Shell->init() phar:///usr/local/bin/psysh/build-vendor/symfony/console/Application.php:641
PHP 9. Psy\Shell->getDefaultCommands() phar:///usr/local/bin/psysh/build-vendor/symfony/console/Application.php:1163
PHP 10. Psy\Configuration->getRuntimeDir() phar:///usr/local/bin/psysh/src/Psy/Shell.php:185
PHP 11. Psy\ConfigPaths::getRuntimeDir() phar:///usr/local/bin/psysh/src/Psy/Configuration.php:348
PHP 12. XdgBaseDir\Xdg->getRuntimeDir() phar:///usr/local/bin/psysh/src/Psy/ConfigPaths.php:153
PHP 13. rmdir() phar:///usr/local/bin/psysh/build-vendor/dnoegel/php-xdg-base-dir/src/Xdg.php:110
Looking at your code on line 110
it seems you are doing an rmdir()
on a directory containing files.
Maybe you could replace with this from StackOverflow?
getRuntimeDir()
returns the value of XDG_RUNTIME_DIR
when available. When using sudo -E
(something that can happen easily on a typical web host, as people running scripts manually need to sudo to the same user that the web server uses, to avoid file permission headaches, and the environment might be required for token checks or language settings or similar), XDG_RUNTIME_DIR
will point to the temp directory of the original user, so the user which the script is running at won't be able to write the tempdir.
E.g. on a server with someuser
and webuser
users, where someuser
has user ID 1 and webuser
has user ID 2, when someuser
executes sudo -E -u webuser foo.php
and foo.php
calls Xdg::getRuntimeDir()
, in the environment of someuser
XDG_RUNTIME_DIR
will be /run/user/1
, and sudo inherits the environment, so Xdg::getRuntimeDir()
will return that directory, but /run/user/1
is owned by someuser
with permission 700, so foo.php
will fail to write it.
Some kind of sanity check of the current user vs. the user ID in XDG_RUNTIME_DIR
would be nice.
Could you tag this at a version (I'd recommend 0.1.0 or 1.0.0 as per semver). That would make it easier to including using composer (no need to use a "dev" stability setting).
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.