저장소에 symlink로 표시됨 - 해당 파일 없음
public_html/app 폴더의 공유 호스팅에 Laravel 앱을 배포했습니다.여기 공용 폴더의 모든 것이 있습니다./..//파일에 나머지 파일이 있습니다.내가 phpartisan storage를 할 때: 파일 폴더의 링크가 콘솔에 표시됩니다.
[ErrorException]
symlink(): No such file or directory
로컬 호스트에서 저장소/업로드 폴더에 파일을 업로드합니다.이제 어떻게 해야 하나요?링크를 변경하려고 했지만 아무 것도 되지 않았습니다...
에 가다
/public디렉터리 및 실행:rm storageLaravel 루트 디렉토리로 이동하여 다음을 실행합니다.
php artisan storage:link
2018년 5월 1일에 편집됨
이 문제는 라벨 프로젝트를 다른 폴더로 이동/복사할 때 발생합니다.
오류가 합니다. public하려면 " " " " 를 사용합니다. " "/" 를 사용하여 삭제해야 .rm storagecommand
후에 행실후후▁after실php artisan storage:link터미널에서 스토리지 링크를 생성합니다.
이 작업은 라벨을 이동/복사/배포할 때마다 수행해야 합니다!
공유 호스팅을 사용할 때 공용 디렉터리를 public_html로 이동하거나 루트 이름 "project"의 프로젝트 디렉터리와 루트 이름 "public_html"의 공용 디렉터리와 같은 다른 디렉터리로 이동할 때 동일한 오류가 발생합니다.
Artisan::call('storage:link')에서 artisan 명령을 실행하면 이 오류가 발생합니다.
솔루션: 먼저 앱/제공자/AppServiceProvider 레지스터 메서드에서 공용 디렉터리를 바인딩해야 합니다.
$this->app->bind('path.public', function() {
return base_path('../public_html');
});
이제 명령을 정상적으로 실행합니다.
아직도 대답이 없을 때를 대비해서요
제가 심볼릭 링크를 로컬로 하고 서버에 파일을 복사해서 문제가 생겼습니다.이 작업을 수행하기 위해 다음 작업을 수행했습니다.
$ cd path/to/laravel/root
// if public does not exist, first create it.
$ cd public
// if public/storage does not exist, first create it.
$ rm -r storage
$ cd ..
// Now it should work
$ php artisan storage:link
이는 일반적으로 Laravel 앱을 다른 디렉터리로 이동한 후에 발생합니다.
실제 스토리지 디렉토리는 "/AppName/storage/app/public/"입니다.
Laravel은 실제 스토리지 dir "/AppName/public/storage"를 가리키는 심볼 링크를 생성합니다.
다른 뜻
"/AppName/public/storage"는 => "/AppName/스토리지/app/public/"을 가리킵니다.
루트 앱 디렉토리를 "/AnotherAppName/"로 변경할 때 심볼 링크가 여전히 이전 경로를 가리킵니다.
"/다른 AppName/public/storage" => "/AppName/스토리지/app/public/"
내 해결책은 수동으로 심볼릭 링크를 업데이트하는 것입니다.
ln -sfn /AnotherAppName/storage/app/public/ /AnotherAppName/public/storage
새로운 php 파일을 만들고 이 코드를 파일에 넣습니다.
<?php
symlink('/home/CpanelUser/storage/app/public', '/home/CpanelUserpublic_html/storage');
?>
"CpanelUser"가 사용자의 cpanel 사용자 이름 또는 호스트 이름으로 변경됩니다.
사이트 이름 쓰기 + 브라우저에서 이 파일을 완료한 사이트 실행 파일의 public_html 폴더(www)에 업로드합니다!
예:제 파일 이름은 symlink입니다.php 및 사이트 이름은 www.anysite.com 업로드 심볼릭입니다.php에서 호스트의 public_dll 폴더로 이동하고 브라우저에서 웹 주소를 가져옵니다.
http://www.anysite.com/symlink.php
이 파일 저장 폴더를 실행한 후 라벨로 공용 폴더를 만들고 앱의 저장 폴더에 연결합니다.
라라벨 포지를 사용하는 미래의 모든 사람.Forge에서 도메인 이름을 변경할 때 이 오류가 발생했습니다.
해결책은 공용 디렉토리로 이동하여 원래 도메인에서 복사된 기존 심볼 링크를 삭제하는 것이었습니다.
링크가는 이심릭링삭후있다니수습을 실행할 수 .php artisan storage:link다시 한 번, 그리고 이것은 올바르게 작동했습니다.
서버에서 이 오류를 해결하려면 디렉토리를 공용으로 변경하고 저장소 폴더에 대한 기호 링크를 제거하십시오.
다음 명령은 공용 폴더에서 심볼 링크를 제거하는 데 도움이 됩니다.
cd public
rm storage
심볼릭 링크를 제거한 후 아래 명령을 사용하여 루트 폴더로 돌아갑니다.
cd ..
이제 다음 명령을 사용하여 심볼릭 링크를 만듭니다.
php artisan storage:link
명령을 성공적으로 실행한 후 다음 메시지가 표시됩니다.
The [public/storage] directory has been linked.
이 게시물이 당신에게 도움이 되길 바랍니다.
SYMLINK(): 해당 파일 또는 디렉터리 레이블 없음
다음 세 단계를 수행합니다.
- 공용 폴더에서 저장소 파일을 제거합니다.
rm 공용/보관소
- 저장소 폴더가 루트 디렉터리에 있으면 앱 폴더 내부의 공용 파일을 제거합니다.
rm 스토리지/앱/퍼블릭
- 링크 명령 실행
phpartisan 스토리지:링크
아직 문제가 해결되지 않은 경우.다음 단계 수행:
- 공용 폴더에서 저장소 링크를 삭제하거나 이러한 명령을 실행합니다.
a)
cd public
을rm storage
저장소 폴더로 이동하여 다음 항목을 확인합니다.
app/public폴더가 존재하지 않으면 새 폴더를 만듭니다.오류가 해결되었는지 확인합니다.
삭제합니다.
storage하고 새 합니다.storage필요한 모든 폴더가 들어 있는 폴더입니다.
storage폴더가 포함됩니다.app, framework,logs
app 포함:public framework 포함:cache, data,sessions,testing, views
파일의 구성이 올바르게 설정되었는지 확인하십시오. 그런 다음 명령줄을 실행하십시오.
php artisan config:cache
php artisan storage:link
구성/파일 시스템으로 이동합니다.나의 경우 심볼 링크 섹션에서 php는 public_path 함수를 제거하고 그 안에 나만의 경로를 작성한 다음 phpartisan storage:link 명령을 다시 실행합니다.
'links' => [
'/var/www/storage' => storage_path('app/public'),
],
나를 위해 일했습니다.
web이 'web.php'를 .BASE_URL/linkstorageURL 1이(가) 필요합니다.이제 저장소 폴더가 공용 폴더 안에 생성되는지 확인합니다.이렇게 하면 문제가 해결됩니다.
Route::get('/linkstorage', function () {
$targetFolder = base_path().'/storage/app/public';
$linkFolder = $_SERVER['DOCUMENT_ROOT'].'/storage';
symlink($targetFolder, $linkFolder);
});
문제는 tesymlink가 /localhost/public/이 아니라 /localhost/storage/app/에 있다는 것입니다. /localhost/storage/app/의 symlink를 제거하면 artisan 명령이 매력적으로 작동합니다.
잘못된 심볼 링크를 만들지 않기 위해 코드에 이것을 배치했습니다.
Route::get('/clear', function () {
Storage::deleteDirectory('public');
Storage::makeDirectory('public');
Artisan::call('route:clear');
Artisan::call('storage:link', [] );
});
DirectAdmin이에는 "DirectAdmin"이라는 파일이 수 .public_html신에대 public폴더를 누릅니다.
그래서 우리가 보통 하는 한 가지 일은 라라벨을 바꾸는 것입니다.public에서 한대폴로 이동합니다.public_html그리고 나서 우리는 우리의.AppServiceProvider아래 코드를 사용하여 새 경로를 바인딩합니다.
$this->app->bind('path.public', fn() => base_path('/public_html'));
그러나 공급자에서 이러한 등록 방법을 사용하기 전에 구성 파일이 로드된다는 것을 알아야 하므로 커널 부트스트랩을 수행하기 전에 구성 파일을 바인딩해야 합니다.
는 그기위해서열기러,, 열기▁in▁open를 엽니다.index.php그리고 코드를 아래에 적습니다.$app정의된 변수:
$app->bind('path.public', fn() => base_path('/public_html'));
이것이 표준적인 방법으로 보이지 않을 수도 있다는 것을 알지만, 그것은 완벽하게 잘 작동하고 있고, 저는 아직 그것에 대한 어떤 중요한 문제도 찾지 못했습니다!
index.php에 추가합니다.
$app->bind('path.public', function() { return __DIR__; });
그런 다음 routes/web.dll에서
이것을 추가합니다.
Route::get('/linkstorage', function () {
Artisan::call('storage:link');
});
그런 다음 링크를 실행합니다.
합니다.public/storage합니다.php artisan storage:link다시 명령합니다.
제 경우, 모든 /public Laravel 파일을 (공유 서버의) public_html로 이동했기 때문에 /public Laravel 디렉토리가 더 이상 존재하지 않습니다.
새로운 "public" 디렉토리를 만든 후에 'phpartisan storage:link' 명령을 성공적으로 실행할 수 있었습니다.
좀 더 즉각적으로 나는 @surresh-direni의 대답을 개선합니다.
mv storage storage.bak // just for backup
mkdir -p storage/{app/public,framework/{cache,data,sessions,testing,views},logs}
php artisan storage:link
은 이제그것일잊말가세요고지은의▁to로 가는 것을 마세요./publicrun: 그 다음에 디터리및실행: rm storage위 명령으로 실행하기 전에
☺ pa 파일: 링크
.production 9999 ✗ [public/storage] 디렉토리입니다.
해결책은 위에 있지만, 각각의 부분에서 하나와 둘을 수행합니다.경로를 추가하면 공유 호스트와 같은 외부 서버에서 사용 사례가 더 쉬워집니다. 예를 들어, 모두에게 감사합니다.
- 구성/파일 시스템으로 이동합니다.나의 경우 심볼 링크 섹션에서 php는 public_path 함수를 제거하고 그 안에 나만의 경로를 작성한 다음 phpartisan storage:link 명령을 다시 실행합니다.
'links' => [
'/var/www/storage' => storage_path('app/public'),
],
- 터미널 명령 없이 스토리지 링크 생성(URL 참조)
Route::get('/linkstorage', function () {
$targetFolder = base_path().'/storage/app/public';
$linkFolder = $_SERVER['DOCUMENT_ROOT'].'/storage';
symlink($targetFolder, $linkFolder);
});
이 문제는 일반적으로 첫 번째 심볼릭 링크를 생성한 후 폴더 위치를 변경할 때 발생합니다. 저는 다음 단계를 수행하여 이 문제를 해결했습니다.
- 공용 폴더로 이동하여 저장소 폴더를 삭제합니다(빨간색 플래그로 레이블 지정됨).
- 저장소 폴더 삭제 후 phpartisan storage:link를 실행하면 문제가 해결됩니다.
다음 단계를 수행합니다.
1단계: server.php
<?php
/**
* Laravel - A PHP Framework For Web Artisans
*
* @package Laravel
* @author Taylor Otwell <taylor@laravel.com>
*/
$uri = urldecode(
parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)
);
// This file allows us to emulate Apache's "mod_rewrite" functionality from the
// built-in PHP web server. This provides a convenient way to test a Laravel
// application without having installed a "real" web server software here.
if ($uri !== '/' && file_exists(__DIR__.'/public_html'.$uri)) {
return false;
}
require_once __DIR__.'/public_html/index.php';
2단계: App\Providers\AppServiceProvider.php
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//Public folder name changed with public_html
$this->app->bind('path.public', function(){
return base_path().'/public_html';
});
}
일반 명령을 실행할 수 있습니다.
php artisan serve
3단계: 구성\files 시스템.php
'links' => [
base_path('public_html/storage') => storage_path('app/public'),
],
스토리지 심볼릭 링크를 올바르게 가져오려면 다음과 같이 하십시오.
php artisan storage:link
나처럼 public_html이 아니라면 경로를 변경하는 것을 기억하십시오.
Docker와 Laravel9에서 동일한 오류가 발생하는 경우 삭제합니다.storage줄을 지어 들어가다public폴더 및 실행php artisan storage:link다시 한 번. 제 경우에는 0KB입니다.
저의 경우, 두 개 이상의 심볼릭 링크를 추가했습니다.config/filesystems링크 중 하나가 하위 폴더에 생성되도록 되어 있지만 상위 폴더가 존재하지 않습니다. 링크가 연결됩니다.public/users/uploads그렇지만public/users폴더가 없습니다.
따라서 첫 번째 단계는 실행하기 전에 공용/사용자 폴더를 만드는 것이었습니다.php artisan storage:link
삭제한 경우public/storage파일 및 아직 수정되지 않았습니다.사용해 보세요.composer dump-autoload.
언급URL : https://stackoverflow.com/questions/47409417/storage-in-laravel-says-symlink-no-such-file
'programing' 카테고리의 다른 글
| 집계 함수가 있는 테이블의 결합 정보 (0) | 2023.08.07 |
|---|---|
| UIView 바운스 애니메이션을 만드는 방법은 무엇입니까? (0) | 2023.08.07 |
| 아이폰에 스플래시 화면이 나타날 때 상태 표시줄을 숨기는 방법은 무엇입니까? (0) | 2023.08.07 |
| PowerShell 일반 컬렉션 (0) | 2023.08.07 |
| jQuery ID는 다음으로 시작합니다. (0) | 2023.08.07 |

