| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- <?php
- /**
- * This file is part of webman.
- *
- * Licensed under The MIT License
- * For full copyright and license information, please see the MIT-LICENSE.txt
- * Redistributions of files must retain the above copyright notice.
- *
- * @author walkor<walkor@workerman.net>
- * @copyright walkor<walkor@workerman.net>
- * @link http://www.workerman.net/
- * @license http://www.opensource.org/licenses/mit-license.php MIT License
- */
- namespace Webman;
- use SplFileInfo;
- use Webman\Exception\FileException;
- use function chmod;
- use function is_dir;
- use function mkdir;
- use function pathinfo;
- use function restore_error_handler;
- use function set_error_handler;
- use function sprintf;
- use function strip_tags;
- use function umask;
- class File extends SplFileInfo
- {
- /**
- * Move.
- * @param string $destination
- * @return File
- */
- public function move(string $destination): File
- {
- set_error_handler(function ($type, $msg) use (&$error) {
- $error = $msg;
- });
- $path = pathinfo($destination, PATHINFO_DIRNAME);
- if (!is_dir($path) && !mkdir($path, 0777, true)) {
- restore_error_handler();
- throw new FileException(sprintf('Unable to create the "%s" directory (%s)', $path, strip_tags($error)));
- }
- if (!rename($this->getPathname(), $destination)) {
- restore_error_handler();
- throw new FileException(sprintf('Could not move the file "%s" to "%s" (%s)', $this->getPathname(), $destination, strip_tags($error)));
- }
- restore_error_handler();
- @chmod($destination, 0666 & ~umask());
- return new self($destination);
- }
- }
|