Exceptions

Failed to create "/var/www/SAE301/public/uploads/articles/": mkdir(): Permission denied

Exception

Symfony\Component\Filesystem\Exception\ IOException

Show exception properties
Symfony\Component\Filesystem\Exception\IOException {#1351
  -path: "/var/www/SAE301/public/uploads/articles/"
}
  1. if (is_dir($dir)) {
  2. continue;
  3. }
  4. if (!self::box('mkdir', $dir, $mode, true) && !is_dir($dir)) {
  5. throw new IOException(\sprintf('Failed to create "%s": ', $dir).self::$lastError, 0, null, $dir);
  6. }
  7. }
  8. }
  9. /**
  1. if ($isLocalFilesystem && !str_starts_with($value, $this->projectDir)) {
  2. $value = $this->projectDir.'/'.$value;
  3. }
  4. if ($isLocalFilesystem && !is_dir($value)) {
  5. $this->filesystem->mkdir($value);
  6. }
  7. if ($isLocalFilesystem && !is_writable($value)) {
  8. throw new InvalidArgumentException(sprintf('The upload directory "%s" is not writable.', $value));
  9. }
in vendor/symfony/options-resolver/OptionsResolver.php -> {closure:EasyCorp\Bundle\EasyAdminBundle\Form\Type\FileUploadType::configureOptions():142} (line 1124)
  1. // dependency
  2. // BEGIN
  3. $this->calling[$option] = true;
  4. try {
  5. foreach ($this->normalizers[$option] as $normalizer) {
  6. $value = $normalizer($this, $value);
  7. }
  8. } finally {
  9. unset($this->calling[$option]);
  10. }
  11. // END
  1. $clone->locked = true;
  2. // Now process the individual options. Use offsetGet(), which resolves
  3. // the option itself and any options that the option depends on
  4. foreach ($clone->defaults as $option => $_) {
  5. $clone->offsetGet($option);
  6. }
  7. return $clone->resolved;
  8. }
  1. }
  2. public function createBuilder(FormFactoryInterface $factory, string $name, array $options = []): FormBuilderInterface
  3. {
  4. try {
  5. $options = $this->getOptionsResolver()->resolve($options);
  6. } catch (ExceptionInterface $e) {
  7. throw new $e(\sprintf('An error has occurred resolving the options of the form "%s": ', get_debug_type($this->getInnerType())).$e->getMessage(), $e->getCode(), $e);
  8. }
  9. // Should be decoupled from the specific option at some point
  1. return $this->proxiedType->getTypeExtensions();
  2. }
  3. public function createBuilder(FormFactoryInterface $factory, string $name, array $options = []): FormBuilderInterface
  4. {
  5. $builder = $this->proxiedType->createBuilder($factory, $name, $options);
  6. $builder->setAttribute('data_collector/passed_options', $options);
  7. $builder->setType($this);
  8. return $builder;
in vendor/symfony/form/FormFactory.php -> createBuilder (line 67)
  1. $options['data'] = $data;
  2. }
  3. $type = $this->registry->getType($type);
  4. $builder = $type->createBuilder($this, $name, $options);
  5. if ($builder instanceof FormFlowBuilderInterface) {
  6. $builder->setInitialOptions($options);
  7. }
  1. $formFieldOptions['ea_form_tab'] = $currentFormTab;
  2. }
  3. $name = $this->isTypeFormField($formFieldType) ? $fieldDto->getPropertyNameWithSuffix() : $name;
  4. $formField = $builder->getFormFactory()->createNamedBuilder($name, $formFieldType, null, $formFieldOptions);
  5. $formField->setAttribute('ea_entity', $entityDto);
  6. $formField->setAttribute('ea_form_fieldset', $options['ea_form_fieldset'] ?? $currentFormFieldset);
  7. $formField->setAttribute('ea_form_tab', $options['ea_form_tab'] ?? $currentFormTab);
  8. $formField->setAttribute('ea_field', $fieldDto);
  1. public function buildForm(FormBuilderInterface $builder, array $options): void
  2. {
  3. $this->parent?->buildForm($builder, $options);
  4. $this->innerType->buildForm($builder, $options);
  5. foreach ($this->typeExtensions as $extension) {
  6. $extension->buildForm($builder, $options);
  7. }
  8. }
  1. return $this->proxiedType->createView($form, $parent);
  2. }
  3. public function buildForm(FormBuilderInterface $builder, array $options): void
  4. {
  5. $this->proxiedType->buildForm($builder, $options);
  6. }
  7. public function buildView(FormView $view, FormInterface $form, array $options): void
  8. {
  9. $this->proxiedType->buildView($view, $form, $options);
in vendor/symfony/form/FormFactory.php -> buildForm (line 75)
  1. $builder->setInitialOptions($options);
  2. }
  3. // Explicitly call buildForm() in order to be able to override either
  4. // createBuilder() or buildForm() in the resolved form type
  5. $type->buildForm($builder, $builder->getOptions());
  6. return $builder;
  7. }
  8. public function createBuilderForProperty(string $class, string $property, mixed $data = null, array $options = []): FormBuilderInterface
  1. $formOptions->set('attr.class', trim(($formOptions->get('attr.class') ?? '').' '.$cssClass));
  2. $formOptions->set('attr.id', sprintf('edit-%s-form', $entityDto->getName()));
  3. $formOptions->set('entityDto', $entityDto);
  4. $formOptions->setIfNotSet('translation_domain', $context->getI18n()->getTranslationDomain());
  5. return $this->symfonyFormFactory->createNamedBuilder($entityDto->getName(), CrudFormType::class, $entityDto->getInstance(), $formOptions->all());
  6. }
  7. public function createEditForm(EntityDto $entityDto, KeyValueStore $formOptions, AdminContext $context): FormInterface
  8. {
  9. return $this->createEditFormBuilder($entityDto, $formOptions, $context)->getForm();
  1. return $this->createEditFormBuilder($entityDto, $formOptions, $context)->getForm();
  2. }
  3. public function createEditFormBuilder(EntityDto $entityDto, KeyValueStore $formOptions, AdminContext $context): FormBuilderInterface
  4. {
  5. return $this->container->get(FormFactory::class)->createEditFormBuilder($entityDto, $formOptions, $context);
  6. }
  7. public function createNewForm(EntityDto $entityDto, KeyValueStore $formOptions, AdminContext $context): FormInterface
  8. {
  9. return $this->createNewFormBuilder($entityDto, $formOptions, $context)->getForm();
  1. $entityManager->flush();
  2. }
  3. public function createEditForm(EntityDto $entityDto, KeyValueStore $formOptions, AdminContext $context): FormInterface
  4. {
  5. return $this->createEditFormBuilder($entityDto, $formOptions, $context)->getForm();
  6. }
  7. public function createEditFormBuilder(EntityDto $entityDto, KeyValueStore $formOptions, AdminContext $context): FormBuilderInterface
  8. {
  9. return $this->container->get(FormFactory::class)->createEditFormBuilder($entityDto, $formOptions, $context);
  1. }
  2. return new Response($newValue ? '1' : '0');
  3. }
  4. $editForm = $this->createEditForm($context->getEntity(), $context->getCrud()->getEditFormOptions(), $context);
  5. $editForm->handleRequest($context->getRequest());
  6. if ($editForm->isSubmitted() && $editForm->isValid()) {
  7. $this->processUploadedFiles($editForm);
  8. $event = new BeforeEntityUpdatedEvent($entityInstance);
  1. $this->dispatcher->dispatch($event, KernelEvents::CONTROLLER_ARGUMENTS);
  2. $controller = $event->getController();
  3. $arguments = $event->getArguments();
  4. // call controller
  5. $response = $controller(...$arguments);
  6. // view
  7. if (!$response instanceof Response) {
  8. $event = new ViewEvent($this, $request, $type, $response, $event);
  9. $this->dispatcher->dispatch($event, KernelEvents::VIEW);
  1. $request->headers->set('X-Php-Ob-Level', (string) ob_get_level());
  2. $this->requestStack->push($request);
  3. $response = null;
  4. try {
  5. return $response = $this->handleRaw($request, $type);
  6. } catch (\Throwable $e) {
  7. if ($e instanceof \Error && !$this->handleAllThrowables) {
  8. throw $e;
  9. }
  1. if (!$this->handlingHttpCache) {
  2. $this->resetServices = true;
  3. }
  4. try {
  5. return $this->getHttpKernel()->handle($request, $type, $catch);
  6. } finally {
  7. --$this->requestStackSize;
  8. }
  9. }
  1. ) {
  2. }
  3. public function run(): int
  4. {
  5. $response = $this->kernel->handle($this->request);
  6. if (Kernel::VERSION_ID >= 60400) {
  7. $response->send(false);
  8. if (\function_exists('fastcgi_finish_request') && !$this->debug) {
in vendor/autoload_runtime.php -> run (line 32)
  1. $app = $app(...$args);
  2. exit(
  3. $runtime
  4. ->getRunner($app)
  5. ->run()
  6. );
require_once('/var/www/SAE301/vendor/autoload_runtime.php') in public/index.php (line 5)
  1. <?php
  2. use App\Kernel;
  3. require_once dirname(__DIR__).'/vendor/autoload_runtime.php';
  4. return function (array $context) {
  5. return new Kernel($context['APP_ENV'], (bool) $context['APP_DEBUG']);
  6. };

Logs

Level Channel Message
INFO 18:28:16 request Matched route "_profiler".
{
    "route": "_profiler",
    "route_parameters": {
        "_route": "_profiler",
        "_controller": "web_profiler.controller.profiler::panelAction",
        "token": "8d3523"
    },
    "request_uri": "http://sae301.mmi24c04.mmi-troyes.fr/_profiler/8d3523?panel=exception&type=request",
    "method": "GET"
}

Stack Trace

IOException
Symfony\Component\Filesystem\Exception\IOException:
Failed to create "/var/www/SAE301/public/uploads/articles/": mkdir(): Permission denied

  at vendor/symfony/filesystem/Filesystem.php:98
  at Symfony\Component\Filesystem\Filesystem->mkdir()
     (vendor/easycorp/easyadmin-bundle/src/Form/Type/FileUploadType.php:154)
  at EasyCorp\Bundle\EasyAdminBundle\Form\Type\FileUploadType->{closure:EasyCorp\Bundle\EasyAdminBundle\Form\Type\FileUploadType::configureOptions():142}()
     (vendor/symfony/options-resolver/OptionsResolver.php:1124)
  at Symfony\Component\OptionsResolver\OptionsResolver->offsetGet()
     (vendor/symfony/options-resolver/OptionsResolver.php:903)
  at Symfony\Component\OptionsResolver\OptionsResolver->resolve()
     (vendor/symfony/form/ResolvedFormType.php:77)
  at Symfony\Component\Form\ResolvedFormType->createBuilder()
     (vendor/symfony/form/Extension/DataCollector/Proxy/ResolvedTypeDataCollectorProxy.php:58)
  at Symfony\Component\Form\Extension\DataCollector\Proxy\ResolvedTypeDataCollectorProxy->createBuilder()
     (vendor/symfony/form/FormFactory.php:67)
  at Symfony\Component\Form\FormFactory->createNamedBuilder()
     (vendor/easycorp/easyadmin-bundle/src/Form/Type/CrudFormType.php:112)
  at EasyCorp\Bundle\EasyAdminBundle\Form\Type\CrudFormType->buildForm()
     (vendor/symfony/form/ResolvedFormType.php:100)
  at Symfony\Component\Form\ResolvedFormType->buildForm()
     (vendor/symfony/form/Extension/DataCollector/Proxy/ResolvedTypeDataCollectorProxy.php:73)
  at Symfony\Component\Form\Extension\DataCollector\Proxy\ResolvedTypeDataCollectorProxy->buildForm()
     (vendor/symfony/form/FormFactory.php:75)
  at Symfony\Component\Form\FormFactory->createNamedBuilder()
     (vendor/easycorp/easyadmin-bundle/src/Factory/FormFactory.php:35)
  at EasyCorp\Bundle\EasyAdminBundle\Factory\FormFactory->createEditFormBuilder()
     (vendor/easycorp/easyadmin-bundle/src/Controller/AbstractCrudController.php:550)
  at EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController->createEditFormBuilder()
     (vendor/easycorp/easyadmin-bundle/src/Controller/AbstractCrudController.php:545)
  at EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController->createEditForm()
     (vendor/easycorp/easyadmin-bundle/src/Controller/AbstractCrudController.php:259)
  at EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController->edit()
     (vendor/symfony/http-kernel/HttpKernel.php:183)
  at Symfony\Component\HttpKernel\HttpKernel->handleRaw()
     (vendor/symfony/http-kernel/HttpKernel.php:76)
  at Symfony\Component\HttpKernel\HttpKernel->handle()
     (vendor/symfony/http-kernel/Kernel.php:191)
  at Symfony\Component\HttpKernel\Kernel->handle()
     (vendor/symfony/runtime/Runner/Symfony/HttpKernelRunner.php:35)
  at Symfony\Component\Runtime\Runner\Symfony\HttpKernelRunner->run()
     (vendor/autoload_runtime.php:32)
  at require_once('/var/www/SAE301/vendor/autoload_runtime.php')
     (public/index.php:5)