За последние 24 часа нас посетили 55011 программистов и 1776 роботов. Сейчас ищут 875 программистов ...

fopen(/5a0cd30374522.txt): failed to open stream: Permission denied in ?

Тема в разделе "PHP для новичков", создана пользователем hacker_farid, 16 ноя 2017.

  1. hacker_farid

    hacker_farid Новичок

    С нами с:
    13 окт 2017
    Сообщения:
    34
    Симпатии:
    0
    Warning: fopen(/5a0cd30374522.txt): failed to open stream: Permission denied in C:\OSPanel\domains\localhost\2lesson8.php on line 14

    При первых 5-10 попытках с вероятностью 10% выдает ошибку. Что тут с правами не так?

    PHP:
    1.     $zet = 'C:\OSPanel\domains\localhost'; //location
    2.     $yet = scandir($zet); //Array
    3.  
    4.     $unidFolder = uniqid();
    5.     $unidFile = uniqid();
    6.  
    7.     mkdir($unidFolder, 0777);
    8.  
    9.     $newAr = glob('*',GLOB_ONLYDIR); //Возвращает список папок .
    10.     $len = count($newAr); // Длина массива $newAr
    11.     $x = mt_rand(0, $len); // Случайный элемент из массива $newAr
    12.  
    13.     fopen("$newAr[$x]/$unidFile.txt",'w', 777);
     
  2. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    С правами всё так, просто имя папки не всегда правильное.
     
  3. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    ёпрст, диапазон ключей массива вообще-то от 0 до count() - 1. "off-by-one error" ))) то есть иногда вы попадаете мимо унитаза. но не знаете об этом, т.к. вывод предупреждений отключен
     
    #3 artoodetoo, 16 ноя 2017
    Последнее редактирование: 16 ноя 2017
  4. keren

    keren Новичок

    С нами с:
    15 ноя 2017
    Сообщения:
    513
    Симпатии:
    42
    А не могли бы подробней объяснить?
    Это так там должно быть:
    Код (Text):
    1. $x = mt_rand(-1, $len);
     
  5. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    --- Добавлено ---
    старайся думать, Фарид, а не только списывать
     
  6. keren

    keren Новичок

    С нами с:
    15 ноя 2017
    Сообщения:
    513
    Симпатии:
    42
    По описанию count() возвращает значения от 0 o_O
     
  7. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
  8. hacker_farid

    hacker_farid Новичок

    С нами с:
    13 окт 2017
    Сообщения:
    34
    Симпатии:
    0
    Да я это знал что count выводит больше чем есть . Но не понимаю почему когда я сканирую дириктории на файлы у меня вылазит 59 а так в папке 57 файлов/ да счет введется с нуля поняли допустим 58 а откуда почему он считывает на один больше ? .
     
  9. keren

    keren Новичок

    С нами с:
    15 ноя 2017
    Сообщения:
    513
    Симпатии:
    42
    Непонятно почему вы написали:"count() - 1"
     
  10. hacker_farid

    hacker_farid Новичок

    С нами с:
    13 окт 2017
    Сообщения:
    34
    Симпатии:
    0
    Ой какой интересный ответ который затронула меня . Во первых у меня профессия Туризм и отельное дело .
    Во вторых я изучаю php потому что это один из ключей к выполнении моей мечты .
    В третьих я учусь сам по себе . и отсюда зачем мне списывать откуда то и врать самому себе?
    --- Добавлено ---
    Не знаю почему но count всегда выводит на один больше не считая то что он начинает считывать с 0
     
  11. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    объясняю:

    PHP:
    1. <?php
    2.  
    3. $array = ['alfa', 'beta', 'gama', 'sigma'];
    4.  
    5. var_dump($array);
    6. echo 'count='.count($array);
    Код (Text):
    1.  
    2. array(4) {
    3.   [0]=>
    4.   string(4) "alfa"
    5.   [1]=>
    6.   string(4) "beta"
    7.   [2]=>
    8.   string(4) "gama"
    9.   [3]=>
    10.   string(5) "sigma"
    11. }
    12. count=4
    Четыре элемента — от нуля до трёх, Карл!
    --- Добавлено ---
    - - -
    и ещё:
    PHP:
    1. <?php
    2.  
    3. $array = ['alfa', 'beta', 'gama', 'sigma'];
    4.  
    5. $n = count($array); // а должно быть count($array) - 1
    6. for ($i=0; $i<100; ++$i) {
    7.   echo $array[mt_rand(0, $n)]."\n";
    8. }
    Код (Text):
    1.  
    2. PHP Notice:  Undefined offset: 4 in /path/to/test.php on line 7
    3.  
    4. Notice: Undefined offset: 4 in /path/to/test.php on line 7
    5.  
    6. beta
    7. sigma
    8. gama
    9. PHP Notice:  Undefined offset: 4 in /path/to/test.php on line 7
    10.  
    11. Notice: Undefined offset: 4 in /path/to/test.php on line 7
    12.  
    13. sigma
    14. sigma
    15. PHP Notice:  Undefined offset: 4 in /path/to/test.php on line 7
    16.  
    17. Notice: Undefined offset: 4 in /path/to/test.php on line 7
    18.  
    19. PHP Notice:  Undefined offset: 4 in /path/to/test.php on line 7
    20.  
    21. Notice: Undefined offset: 4 in /path/to/test.php on line 7
    22.  
    23. sigma
    24. beta
    25. beta
    26. beta
    27. sigma
    28. beta
    29. alfa
    30. PHP Notice:  Undefined offset: 4 in /path/to/test.php on line 7
    31.  
    32. Notice: Undefined offset: 4 in /path/to/test.php on line 7
    33.  
    34. beta
    35. PHP Notice:  Undefined offset: 4 in /path/to/test.php on line 7
    36.  
    37. Notice: Undefined offset: 4 in /path/to/test.php on line 7
    --- Добавлено ---
    про "файлы и вылазит" — ты наверное говоришь о том, что в директории кроме файлов есть записи "." и ".."
    это особенность файловой системы — ссылки на саму директорию и на директорию уровнем выше. они всегда есть!

    вообще если сталкиваешся с чем-то непонятным, отлаживайся, выводи проверочные значения и научишся чему-то новому

    http://phpfaq.ru/debug