在AWS EC2实例使用HTML表单提交时遇InvalidArgument错误求助
解决AWS EC2上HTML表单提交时的"Invalid Project"错误
从你收到的错误信息 <Error><Code>InvalidArgument</Code><Message>Invalid argument.</Message><Details>The requested project was not found.</Details></Error> 来看,这大概率是你的PHP邮件脚本在调用AWS服务(比如SES,因为脚本名是email_me.php)时,配置出了问题。下面分步骤帮你排查解决:
1. 检查AWS服务的配置参数
如果你的脚本使用了AWS SDK来发送邮件(比如SES),重点看这几个点:
- 是否指定了错误的项目/账户信息:有些旧版AWS服务会用到"project ID",但现在更多用账户ID或ARN。如果脚本里硬编码了项目ID,确认它属于你的AWS账户,并且没有拼写错误。
- IAM权限与凭证配置:
- 如果你给EC2实例绑定了IAM角色,确保这个角色有
ses:SendEmail或ses:SendRawEmail的权限,并且角色已经正确关联到实例上。 - 如果你在脚本里硬编码了AWS Access Key和Secret Key,确认这组凭证属于你的账户,并且有对应的SES权限。
- 如果你给EC2实例绑定了IAM角色,确保这个角色有
- 区域配置:初始化AWS客户端时,指定的区域必须是你启用SES的区域(比如
us-east-1),区域不匹配也可能触发这类错误。
举个正确的SES客户端初始化示例:
require 'vendor/autoload.php'; use Aws\Ses\SesClient; $client = new SesClient([ 'version' => 'latest', 'region' => 'us-east-1', // 替换成你启用SES的区域 // 如果用EC2 IAM角色,不需要下面的credentials字段,SDK会自动获取 'credentials' => [ 'key' => '你的AWS Access Key', 'secret' => '你的AWS Secret Key', ] ]);
2. 验证表单与脚本的路径匹配
确保你的HTML表单的action属性正确指向了PHP脚本的路径:
<form action="/php/email_me.php" method="POST"> <!-- 你的表单字段 --> <button type="submit" name="submit">提交</button> </form>
如果路径写错,可能会触发404或者其他错误,但先确认这个基础配置没问题。
3. 检查EC2实例的Web服务器与权限配置
- 确保PHP解析正常:如果用Apache,确认已经安装了
libapache2-mod-php,并且Apache配置文件允许解析.php文件。可以通过创建一个phpinfo.php文件测试:
访问这个文件如果能正常显示PHP信息,说明解析没问题。<?php phpinfo(); ?> - 修复目录权限:确保Web服务器用户(比如
www-data)有读取和执行/var/www/html/php目录的权限:sudo chown -R www-data:www-data /var/www/html/php sudo chmod -R 755 /var/www/html/php
4. 查看详细错误日志定位问题
如果上面的步骤没解决,查看Apache或PHP的错误日志获取更多细节:
# 查看Apache错误日志 tail -f /var/log/apache2/error.log # 查看PHP错误日志(路径可能因系统不同而异) tail -f /var/log/php/error.log
日志里会有更具体的错误信息,比如AWS SDK的调用报错细节,能帮你快速定位问题。
内容的提问来源于stack exchange,提问作者Sam Germain
相关产品推荐
相关产品推荐

