标签: php

转向源代码管理

我们是一家相当小的公司(3-4 名程序员和 3-4 名网站设计师),开发单一用途的 PHP 网络应用程序,该应用程序为大约 100 多个网站提供功能。我们已经在单独的开发和生产环境中运行了几年,并且运行良好。总是有足够多的独立功能需要开发,程序员从来没有真正发生冲突,而且没有源代码控制也更方便工作;即使它有数据丢失的风险,我们也有相当一部分文件在不经意间丢失。

另一个考虑是我们的设计师不精通技术(我向他们介绍了 html 标记,而不是使用所见即所得)。这是在转向版本控制方面犹豫不决的原因之一。

然而,现在我们已经达到了 100 多个站点并且开发团队也在不断壮大,我正在尝试标准化我们的程序,就程序员而言,源代码控制似乎是一个合乎逻辑的步骤。我希望这也能加快我们的补丁部署。

不幸的是,我在设置源代码控制系统方面的经验非常有限。我很想从有类似设置或有转换经验的人那里听到什么:

1) 您是否对所有内容(站点、css、html 模板和应用程序代码)进行版本控制,从而迫使设计人员学习版本控制?或者只是开发应用程序代码的开发人员?

2) 最初设置源代码管理时需要注意哪些陷阱?

3) 部署 dev => 用于源代码控制的生产技巧。

感谢所有的洞察力。

编辑1:当。到目前为止,每个人都建议控制一切。那会让我早早掉头发。在不久的将来,这可能会引发一个新问题。感谢您到目前为止的建议,继续加油!

编辑 2:很多好的答案,我们将研究各种版本控制系统。谢谢大家的回复!

php version-control

10
推荐指数
1
解决办法
757
查看次数

centos 5.6 上的 apache 给了我权限被拒绝错误

我在centos 5.6上运行apache,每当我尝试在任何目录中加载php脚本时,除了/var/www/html(apache默认根目录),它都会给我一个权限被拒绝的错误。

但是,当我根据默认目录 (/var/www/html) 检查我的新根目录 (/var/www-dev) 的权限时,它们完全匹配。都说:root:root 755

我什至尝试将所有权更改为 apache:apache,但仍然出现相同的错误

但是当我将 apache 配置改回它的默认根目录(/var/www/html)时,一切正常。

难道我做错了什么?

这些是我正在更改的设置:

DocumentRoot "/var/www/html"

<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>
Run Code Online (Sandbox Code Playgroud)

注意:每次更改 apache 配置和权限时,我都会重新启动 apache。

同样:我还启用了 REMI 和 EPEL

php configuration centos apache-2.2

10
推荐指数
1
解决办法
4515
查看次数

构建学生存储服务器

我在一个学区工作。我负责为学生构建存储服务器。一个让他们在学校和家里工作的地方。

我的挑战是让它在家工作。在学校,他们登录、验证并获得映射到服务器上的文件夹的驱动器 ( S:\fileserver\studentname)。

我的问题是我怎样才能让学生在家中使用它?

服务器正在运行 Windows Server 2008 R2。我让 PHP、Apache 和 MySQL 协同工作。我的想法是编写一个脚本,该脚本将“爬行”包含所有学生文件夹的目录,然后在 MySQL 数据库中创建每个文件和文件夹的实例。创建一个使用 LDAP 进行身份验证的登录页面,一旦他们从家里登录到服务器,他们就会得到一个页面,其中包含与他们的用户名相关联的文件夹。

有没有人把这样的东西放在一起??

php

10
推荐指数
3
解决办法
1082
查看次数

我的服务器管理员希望我对目录设置公共写入权限

我对 Web 开发比较陌生,所以请耐心等待。

我主要是 iPhone 开发人员,但最近使用共享主机为其他人创建了一个站点。我可以在该站点上用 PHP 写入文件,而无需考虑权限。

我正在为我正在制作的新应用程序部署 Web 服务,但进展并不顺利。这里最重要的区别是我使用的是其他人的服务器,并且只有 FTP/DB 访问权限。

基本上,我有很多 PHP 文件构成了我的 CMS,如下所示:

mysite.com/admin/manage_news.php
mysite.com/admin/manage_events.php
Run Code Online (Sandbox Code Playgroud)

然后这些脚本编辑数据库或文件。他们可以很好地与数据库交互,但是,我的脚本无法写入文件系统。例如,他们可能会尝试写入以下文件:

mysite.com/data/img/event_1.png
mysite.com/data/somefile.txt
Run Code Online (Sandbox Code Playgroud)

这在我的 MAMP 安装(本地)上运行良好,但是一旦部署到服务器,每次尝试写入时 PHP 都会出现错误......

无法打开文件“../data/img/someimage.png”进行写入。

所以我给运行服务器的人发了电子邮件,他回来说:

它在公共许可下工作吗?(777)

而且,确实如此 - 但我对使用公共权限非常谨慎,因此立即再次禁用它。我给他发邮件说“我怎样才能让我的 PHP 脚本使用标准用户权限来编写”,他说:

把它公开,就没事了

我认为这是域解析中某处的 ip 冲突,但我并不担心。

然后我给他发电子邮件说“这肯定是不安全的”或类似的话,他回复如下:

现实情况是,有数百万个网站,包括我管理的几个网站,它们在各种文件夹中都有 777 个,这只是一种生活方式。

谁能给我一些我可以给他的解决方案的想法?或者我可以做些什么来避免使用 777?我真的不喜欢我的网站/服务上的任何文件夹都可以公开写入的想法。

我非常感谢您的建议,因为我对 Web 服务器知之甚少。

php permissions vps file-permissions apache-2.2

9
推荐指数
2
解决办法
732
查看次数

php5-fpm:用于在重启前检查配置的 bash 脚本

我编写了一个脚本来在 Nginx 上创建新的虚拟主机。该脚本创建 Ningx vhost 配置文件、vhost 用户和目录、php-fpm 池文件。

在脚本的末尾,我想在重新启动 php-fpm 之前检查配置是否正常。对于 Apache,我可以apachectl graceful,但是可以用 做类似的事情php5-fpm -t吗?

scripting php bash php-fpm

9
推荐指数
1
解决办法
2万
查看次数

PHP 需要重新启动 Apache 才能重新读取 php.ini?

PHP 是否在每次请求时读取 php.ini 或者我是否必须重新启动 Apache 才能让 php 了解 php.ini 上的更改?

php php.ini apache-2.2

9
推荐指数
1
解决办法
8626
查看次数

IIS 未显示详细的 PHP 错误 - 而是显示服务器故障 500

我习惯于从 Apache 为站点提供服务,但现在我不得不使用 IIS 服务器。

我的许多 PHP 页面返回错误 500,我无法调试,因为 IIS 正在抑制错误消息。我已经尝试ini_set('display_errors',1);过代码,但无济于事。

错误显示在某些站点上,但不是我想要调试的特定站点,因此我认为它不是全局 PHP 设置,而是与该站点的站点设置有关。

我找不到关于如何启用显示 PHP 错误的明确答案。

我找到了这个链接,但不确定在哪里可以找到“ system.webServer->httpErrors ”。

如何在 IIS 下启用 PHP 中的显示错误?

iis php

9
推荐指数
2
解决办法
1万
查看次数

如何找出我的 php5-fpm 无法启动的原因?

当我尝试访问我的服务器时,我收到 504 网关超时。

一个小的检查没有在 php5-fpm 日志上找到任何日志,但为了确保,我尝试重新启动它。

当我尝试重新启动它时:

sudo service php5-fpm restart
Run Code Online (Sandbox Code Playgroud)

我明白了[fail],但是当我这样做的时候

sudo service php5-fpm stop
sudo service php5-fpm start
Run Code Online (Sandbox Code Playgroud)

我没有错误。

如果没有日志,我该如何调查?我能做什么?

linux php php-fpm

9
推荐指数
2
解决办法
7万
查看次数

多站点托管 - 错过重要漏洞以保护站点彼此之间的安全?

编辑 #2 2015 年 7 月 23 日:寻找一个新的答案,以识别以下设置中遗漏的重要安全项目,或者可以让我们有理由相信一切都已涵盖。

编辑 #3 2015 年 7 月 29 日:我特别在寻找可能的错误配置,例如无意中允许可能被利用来规避安全限制的东西,或者更糟的是却留下了一些大的漏洞。

这是多站点/共享主机设置,我们希望使用共享 Apache 实例(即在一个用户帐户下运行),但 PHP/CGI 以每个网站的用户身份运行,以确保没有站点可以访问另一个站点的文件,我们希望确保没有遗漏任何内容(例如,如果我们不知道符号链接攻击预防)。

这是我到目前为止所拥有的:

  • 确保 PHP 脚本作为网站的 Linux 用户帐户和组运行,并且被监禁(例如使用 CageFS)或至少使用 Linux 文件系统权限进行适当限制。
  • 使用 suexec 确保 CGI 脚本不能以 Apache 用户身份运行。
  • 如果需要服务器端包含支持(例如在 shtml 文件中),请使用Options IncludesNOEXEC以防止 CGI 在您不希望它运行时能够运行(尽管如果使用 suexec,这应该不是什么大问题)。
  • 具有符号链接攻击保护,以便黑客无法欺骗 Apache 以纯文本形式提供另一个网站的文件并披露可利用的信息,例如数据库密码。
  • 将AllowOverride/配置AllowOverrideList为仅允许黑客无法利用的任何指令。我认为如果上述项目做得正确,这就不那么重要了。

如果 MPM ITK 不是那么慢并且不是以 root 身份运行,我会选择它,但我们特别想使用共享的 Apache,但要确保它安全地完成。

我找到了http://httpd.apache.org/docs/2.4/misc/security_tips.html,但它在这个主题上并不全面。

如果有帮助的话,我们计划将 CloudLinux 与 CageFS 和 mod_lsapi 一起使用。

还有什么需要确保做或知道的吗?

编辑 2015 年 7 月 20 日:人们提交了一些很好的替代解决方案,这些解决方案通常很有价值,但请注意,此问题仅针对共享 Apache …

php virtualhost shared-hosting apache-2.2 apache-2.4

9
推荐指数
1
解决办法
1758
查看次数

安装了新版本的 php 但 Apache 仍在使用旧版本

我在 Ubuntu 10.04 上手动安装了 php 5.4。旧版本是 5.3.2。现在,如果我检查 php 版本,它会显示 5.4:

max@ubuntu:/etc/php5$ php -v
PHP 5.4.0 (cli) (built: Jul 21 2015 14:04:16)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies
Run Code Online (Sandbox Code Playgroud)

但是如果我在 /var/www/ 中加载 index.php 文件,apache 仍然显示 php 版本是 5.3.2。

如何让apache识别新的php 5.4版本?

php apache-2.2

9
推荐指数
2
解决办法
7833
查看次数