我在PHP 5.6中遇到了流套接字和SSL的问题.似乎SSL正在缓冲输出.在下面的示例中,"ehlo"命令被忽略(服务器没有响应).但是当在"ehlo"之后发送其他内容时,例如在另一次调用中的新行fwrite,服务器发送响应.
$errno = '';
$errstr = '';
$timeout = 5;
$streamContext = stream_context_create();
$host = 'ssl://smtp.some.server.com:465';
$stream = stream_socket_client($host, $errno, $errstr, $timeout, STREAM_CLIENT_CONNECT, $streamContext);
stream_set_blocking($stream, 1);
stream_set_timeout($stream, $timeout);
stream_set_write_buffer($stream, 0);
$fgets = fgets($stream);
print_r($fgets);
fwrite($stream, "ehlo [127.0.0.1]\r\n");
$response = '';
do {
$line = fgets($stream);
$response .= $line;
} while (null !== $line && false !== $line && ' ' != $line{3});
print_r($response);
fclose($stream);
Run Code Online (Sandbox Code Playgroud)
我得到了回复:
220 epicserver.net.pl ESMTP IdeaSmtpServer v0.80.2 ready.
(这是从第一次开始print_r).
但是在线后:fwrite($stream, "ehlo …
当我尝试在IDE PhpStorm中运行PHPUnit测试时,我没有什么问题.
我使用的composer文件看起来像:
{
"require": {
"phpunit/phpunit": "3.7.19"
}
}
Run Code Online (Sandbox Code Playgroud)
现在,当我运行测试时,我会发现异常:
PHP Fatal error: Uncaught exception 'PHPUnit_Framework_Exception' with message 'Class "PHPUnit_Extensions_RepeatedTest" does not extend PHPUnit_Framework_TestCase.'
怎么了?当我加入梨装版本测试工作正常.
// 编辑 示例测试类:
class ReaderTest extends PHPUnit_Framework_TestCase
{
/**
* @test
*/
public function shouldGetReadedValue ()
{
$this->assertTrue(true);
}
}
Run Code Online (Sandbox Code Playgroud)
// EDIT2 跟踪:
/usr/bin/php /tmp/ide-phpunit.php --no-configuration /path/to/my/project
Testing started at 14:53 ...
PHP Fatal error: Uncaught exception 'PHPUnit_Framework_Exception' with message 'Class "PHPUnit_Extensions_RepeatedTest" does not extend PHPUnit_Framework_TestCase.' in /path/to/my/project/vendor/phpunit/phpunit/PHPUnit/Framework/TestSuite.php:183
Stack trace:
#0 /path/to/my/project/vendor/phpunit/phpunit/PHPUnit/Framework/TestSuite.php(315): PHPUnit_Framework_TestSuite->__construct(Object(ReflectionClass))
#1 …Run Code Online (Sandbox Code Playgroud) 我有这个功能,我想测试看起来像这样:
class Logger {
function error($msg){
if (is_string($msg)){
error_log($msg);
die($msg);
} elseif (is_object($msg)){
error_log($msg.' '.$msg->getTraceAsString());
die('exception');
} else {
var_dump($msg);
die('error');
}
}
Run Code Online (Sandbox Code Playgroud)
我想测试这个功能而不记录$msg.有没有办法确定error_log没有记录是否有效?我尝试使用,setExpectedException但我无法捕获错误,它一直在记录.
我有读取器类从stdin读取并返回readed值.
class Reader
{
const STREAM_READ = 'php://stdin';
private $_streamHandle;
public function __construct($stream = self::STREAM_READ)
{
$this->_streamHandle = fopen($stream, 'r');
}
public function getReadedValue()
{
$value = trim(fgets($this->_streamHandle));
return $value;
}
public function __destruct()
{
fclose($this->_streamHandle);
}
}
Run Code Online (Sandbox Code Playgroud)
现在是我的问题,我如何测试这个类,从stdin读取一些东西并按getReadedValue()函数返回readed值?
我有一个ul定义的喜欢
<div>
<ul id="mylist">
</ul>
</div>
Run Code Online (Sandbox Code Playgroud)
在我的javascript中,我使用jquery将li项添加到此ul
$("mylist").append("<li>Test</li>");
Run Code Online (Sandbox Code Playgroud)
我希望我的ul自动向下滚动div,当我添加了很多li项目并且ul超过为它定义的高度时
我尝试过的事情:
我目前有一个从远程URL抓取mp3文件的功能,并将其上传到Amazon S3存储桶.
该函数似乎工作正常,因为该文件出现在S3中,但是我担心在使用隧道(ngrok)在我的本地服务器上测试时,页面似乎没有返回任何HTTP状态.
当我首先在本地下载文件然后上传它时它确实返回200.当我们处理大型音频文件时,我试图让第一个想法发挥作用,因为它更有效(我认为).
有没有办法让页面返回HTTP状态代码,我应该担心它目前没有?
以下是在PHP中使用V2 Amazon SDK的代码段
$config = array('key' => AMAZON_S3_KEY,'secret' => AMAZON_S3_SECRET,'region' => 'us-west-2');
$s3 = Aws::factory($config)->get('s3')->registerStreamWrapper();
$s3->putObject(array(
'Bucket' => 'mybucket',
'Key' => 'filename.mp3',
'ContentLength' => $size,
'Body' => fopen($url, 'r')
));
Run Code Online (Sandbox Code Playgroud) @ApiModelProperty我有一个大摇大摆的问题。在我的模型中,我@ApiModelProperty这样使用
private static final long serialVersionUID = -7142106197262010406L;
private int brandId;
private String brandName;
private String fullName;
private String webSite;
private String logoUrl;
private String note;
@ApiModelProperty(position = 1, required = true, value="")
public int getBrandId() {
return brandId;
}
public void setBrandId(int brandId) {
this.brandId = brandId;
}
@ApiModelProperty(position = 2, required = true)
public String getBrandName() {
return brandName;
}
public void setBrandName(String brandName) {
this.brandName = brandName;
}
@ApiModelProperty(position = 3, required = true) …Run Code Online (Sandbox Code Playgroud) 我有模拟父方法的问题,这是一个例子:
class PathProvider
{
public function getPath()
{
return isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '/';
}
}
class Uri extends PathProvider
{
public function getParam($param)
{
$path = $this->getPath();
if ($path == $param)
return 'OK';
else
return 'Bad';
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想要模拟方法getPath(),并调用方法getParam()来获取模拟值.
$mock = $this->getMock('PathProvider');
$mock->expects($this->any())
->method('getPath')
->will($this->returnValue('/panel2.0/user/index/id/5'));
Run Code Online (Sandbox Code Playgroud)
我写这部分,但我不知道如何将这个模拟值传递给测试方法.
我在mb_detect_encoding()中检测CP1250时遇到问题,在我的情况下我想要检测3个编码:
mb_detect_encoding($string, 'UTF-8,ISO-8859-2,Windows-1250')
Run Code Online (Sandbox Code Playgroud)
但Windows不支持编码,任何解决方案?
我一直在研究一个需求(在PHP中),我坚持使用下面的内容.
我需要搜索6800到6899之间的数字.如何使用字符串'68'搜索.这样我就可以获得该范围内的所有数字.
现在,我有一个想法:
if ($Model== 'Jazz6800i') return true;
if ($Model== 'Jazz6801i') return true;
......
if ($Model== 'Jazz6899i') return true;
Run Code Online (Sandbox Code Playgroud)
我们有没有替代PHP,而不是编写很多代码,从68开始搜索?
我在1and1主机上发送电子邮件进行故障排除.
我使用的swift邮件程序lib消息是stream_socket_client(): unable to connect to mrvnet.kundenserver.de:0 http://mrvnet.kundenserver.de:0 (Connection timed out).
有没有人有类似的麻烦?有解决方案吗
PS.在我的localhost一切都很好.