programing

저장소에 symlink로 표시됨 - 해당 파일 없음

sourcejob 2023. 8. 7. 22:30
반응형

저장소에 symlink로 표시됨 - 해당 파일 없음

public_html/app 폴더의 공유 호스팅에 Laravel 앱을 배포했습니다.여기 공용 폴더의 모든 것이 있습니다./..//파일에 나머지 파일이 있습니다.내가 phpartisan storage를 할 때: 파일 폴더의 링크가 콘솔에 표시됩니다.

[ErrorException]                      
  symlink(): No such file or directory

로컬 호스트에서 저장소/업로드 폴더에 파일을 업로드합니다.이제 어떻게 해야 하나요?링크를 변경하려고 했지만 아무 것도 되지 않았습니다...

  1. 에 가다/public디렉터리 및 실행:

    rm storage

  2. Laravel 루트 디렉토리로 이동하여 다음을 실행합니다.

    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에서 도메인 이름을 변경할 때 이 오류가 발생했습니다.

storage:link error

해결책은 공용 디렉토리로 이동하여 원래 도메인에서 복사된 기존 심볼 링크를 삭제하는 것이었습니다.

public symlink to storage

링크가는 이심릭링삭후있다니수습을 실행할 수 .php artisan storage:link다시 한 번, 그리고 이것은 올바르게 작동했습니다.

서버에서 이 오류를 해결하려면 디렉토리를 공용으로 변경하고 저장소 폴더에 대한 기호 링크를 제거하십시오.

다음 명령은 공용 폴더에서 심볼 링크를 제거하는 데 도움이 됩니다.

cd public

rm storage

심볼릭 링크를 제거한 후 아래 명령을 사용하여 루트 폴더로 돌아갑니다.

cd ..

이제 다음 명령을 사용하여 심볼릭 링크를 만듭니다.

php artisan storage:link

명령을 성공적으로 실행한 후 다음 메시지가 표시됩니다.

The [public/storage] directory has been linked.

이 게시물이 당신에게 도움이 되길 바랍니다.

SYMLINK(): 해당 파일 또는 디렉터리 레이블 없음

다음 세 단계를 수행합니다.

  1. 공용 폴더에서 저장소 파일을 제거합니다.

    rm 공용/보관소

  2. 저장소 폴더가 루트 디렉터리에 있으면 앱 폴더 내부의 공용 파일을 제거합니다.

    rm 스토리지/앱/퍼블릭

  3. 링크 명령 실행

    phpartisan 스토리지:링크

아직 문제가 해결되지 않은 경우.다음 단계 수행:

  1. 공용 폴더에서 저장소 링크를 삭제하거나 이러한 명령을 실행합니다.

a)

cd public

rm storage

  1. 저장소 폴더로 이동하여 다음 항목을 확인합니다.app/public폴더가 존재하지 않으면 새 폴더를 만듭니다.

  2. 오류가 해결되었는지 확인합니다.

  3. 삭제합니다.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] 디렉토리입니다.

해결책은 위에 있지만, 각각의 부분에서 하나와 둘을 수행합니다.경로를 추가하면 공유 호스트와 같은 외부 서버에서 사용 사례가 더 쉬워집니다. 예를 들어, 모두에게 감사합니다.

  1. 구성/파일 시스템으로 이동합니다.나의 경우 심볼 링크 섹션에서 php는 public_path 함수를 제거하고 그 안에 나만의 경로를 작성한 다음 phpartisan storage:link 명령을 다시 실행합니다.
'links' => [
   '/var/www/storage' => storage_path('app/public'),
],
  1. 터미널 명령 없이 스토리지 링크 생성(URL 참조)
Route::get('/linkstorage', function () {
    $targetFolder = base_path().'/storage/app/public';
    $linkFolder = $_SERVER['DOCUMENT_ROOT'].'/storage';
    symlink($targetFolder, $linkFolder); 
});

이 문제는 일반적으로 첫 번째 심볼릭 링크를 생성한 후 폴더 위치를 변경할 때 발생합니다. 저는 다음 단계를 수행하여 이 문제를 해결했습니다.

  1. 공용 폴더로 이동하여 저장소 폴더를 삭제합니다(빨간색 플래그로 레이블 지정됨).
  2. 저장소 폴더 삭제 후 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

반응형