PHP mkdir()无法在浏览器中运行

时间:2016-08-11 09:55:37

标签: php linux apache permissions mkdir

我尝试使用php在我的本地apache服务器上创建目录 我试过了 <?php mkdir("folder"); ?>

<?php exec("sudo mkdir folder"); ?>
当我尝试在浏览器中执行它们时,没有任何事情发生 但我可以使用sudo从终端执行它们。 (我还修改了sudoers文件,因此它不会在第二个代码中提示输入密码)
当我不使用sudo时,我收到此错误     PHP Warning: mkdir(): Permission denied in /var/www/html/mscr/add.php on line 2

我还尝试了 this this

所以我可以在浏览器中执行除目录操作之外的几乎所有操作。 我希望能够在浏览器中创建,删除和编辑目录。

谢谢!

2 个答案:

答案 0 :(得分:0)

听起来Apache没有创建文件夹的权限。要么为Apache提供文件夹的所有权(您尝试创建新文件夹的地方)

sudo chown www-data /var/www/html/mscr

或将文件夹权限设置为777

sudo chmod 777 /var/www/html/mscr

警告这会使mscr文件夹中的所有内容都可执行。为了解决这个问题,大多数CMS将创建一个子文件夹,设置为777,所以类似于/ var / www / html / mscr / uploads

答案 1 :(得分:0)

   using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
class Solution
{
    static void Main(String[] args)
    {
        string[] inputs = { "GAAATAAA", "CACCGCTACCGC", "CAGCTAGC", "AAAAAAAA", "GAAAAAAA", "GATGAATAACCA", "ACGT" };

        List<string> replacement = new List<string>();
        foreach (var item in inputs)
        {
            replacement.Add(StringThatHasToBeReplaced(item));
        }
    }

    static string StringThatHasToBeReplaced(string s)
    {
        var counter = new Dictionary<char, int>() {
            { 'A', 0 }, { 'C', 0 }, { 'G', 0 }, { 'T', 0 }
        };
        for (int i = 0; i < s.Length; ++i)
            counter[s[i]] += 1;

        int div = s.Length / 4;
        var pairs = counter.ToList();

        if (pairs.Where(p => p.Value != div).Count() == 0)
        {
            return null;
        }

        List<char> surplusCharacter = pairs.Where(p => p.Value > div).Select(p => p.Key).ToList();
        int minLength = pairs.Where(p => p.Value > div).Sum(p => p.Value - div);
        string result = s;
        for (int i = 0; i < s.Length - minLength + 1; i++) // i is the start index
        {
            if (surplusCharacter.Contains(s[i]))
            {
                if (minLength == 1)
                    return s[i].ToString();

                for (int j = i + minLength - 1; j < s.Length; j++) // j is the end index
                {
                    if (surplusCharacter.Contains(s[j]))
                    {
                        var substring = s.Substring(i, j - i);
                        if (substring.Length >= result.Length)
                        {
                            break;
                        }
                        // we test if substring can be the string that need to be replaced
                        var isValid = true;
                        foreach (var c in surplusCharacter)
                        {
                            if (substring.Count(f => f == c) < counter[c] - div)
                            {
                                isValid = false;
                                break;
                            }
                        }
                        if (isValid)
                            result = substring;
                    }
                }
            }
        }
        return result;
    }


}