<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>digital matter &#187; PHP</title>
	<atom:link href="http://blog.loadlimits.info/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.loadlimits.info</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Sun, 29 Jan 2012 07:43:32 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>DoctrineMongoDBBundleでAbstractDoctrineExtensionのエラー</title>
		<link>http://blog.loadlimits.info/2012/01/doctrinemongodbbundle%e3%81%a7abstractdoctrineextension%e3%81%ae%e3%82%a8%e3%83%a9%e3%83%bc/</link>
		<comments>http://blog.loadlimits.info/2012/01/doctrinemongodbbundle%e3%81%a7abstractdoctrineextension%e3%81%ae%e3%82%a8%e3%83%a9%e3%83%bc/#comments</comments>
		<pubDate>Sun, 29 Jan 2012 07:43:32 +0000</pubDate>
		<dc:creator>hotpi</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[解決]]></category>
		<category><![CDATA[doctrine]]></category>
		<category><![CDATA[MongoDB]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://blog.loadlimits.info/2012/01/doctrinemongodbbundle%e3%81%a7abstractdoctrineextension%e3%81%ae%e3%82%a8%e3%83%a9%e3%83%bc/</guid>
		<description><![CDATA[PHP Fatal error:&#160; Class &#8216;Symfony\\Bridge\\Doctrine\\DependencyInjection\\AbstractDoctrineExtension&#8217; not found in /home/path/to/Symfony/vendor/bundles/Symfony/Bundle/DoctrineMongoDBBundle/DependencyInjection/DoctrineMongoDBExtension.php on line 31 php &#8211; DoctrineMongoDBBundle getting a fatal error in Symfony2 &#8211; Stack Overflow masterリポジトリが書き換えられていて、最新バージョンでは動かないのでdepsファイルにDoctrineMongoDBBundleのレポジトリを指定するときに、バージョン番号を指定する必要があるということでした。 DoctrineMongoDBBundleセクションにversion=v2.0.0を追加すればOKです。 [doctrine-mongodb] git=http://github.com/doctrine/mongodb.git [doctrine-mongodb-odm] git=http://github.com/doctrine/mongodb-odm.git [DoctrineMongoDBBundle] git=http://github.com/symfony/DoctrineMongoDBBundle.git target=/bundles/Symfony/Bundle/DoctrineMongoDBBundle version=v2.0.0]]></description>
			<content:encoded><![CDATA[<p>PHP Fatal error:&#160; Class &#8216;Symfony\\Bridge\\Doctrine\\DependencyInjection\\AbstractDoctrineExtension&#8217; not found in /home/path/to/Symfony/vendor/bundles/Symfony/Bundle/DoctrineMongoDBBundle/DependencyInjection/DoctrineMongoDBExtension.php on line 31</p>
<p><a href="http://stackoverflow.com/questions/7985248/doctrinemongodbbundle-getting-a-fatal-error-in-symfony2" target="_blank">php &#8211; DoctrineMongoDBBundle getting a fatal error in Symfony2 &#8211; Stack Overflow</a></p>
<p>masterリポジトリが書き換えられていて、最新バージョンでは動かないのでdepsファイルにDoctrineMongoDBBundleのレポジトリを指定するときに、バージョン番号を指定する必要があるということでした。   <br />DoctrineMongoDBBundleセクションにversion=v2.0.0を追加すればOKです。</p>
<div style="padding-bottom: 0px;margin: 0px;padding-left: 0px;padding-right: 0px;float: none;padding-top: 0px" class="wlWriterEditableSmartContent">
<pre>[doctrine-mongodb]
    git=http://github.com/doctrine/mongodb.git

[doctrine-mongodb-odm]
    git=http://github.com/doctrine/mongodb-odm.git

[DoctrineMongoDBBundle]
    git=http://github.com/symfony/DoctrineMongoDBBundle.git
    target=/bundles/Symfony/Bundle/DoctrineMongoDBBundle
    version=v2.0.0
</pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.loadlimits.info/2012/01/doctrinemongodbbundle%e3%81%a7abstractdoctrineextension%e3%81%ae%e3%82%a8%e3%83%a9%e3%83%bc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows版のPHP5.3がc0000005で強制終了する</title>
		<link>http://blog.loadlimits.info/2012/01/windows%e7%89%88%e3%81%aephp5-3%e3%81%8cc0000005%e3%81%a7%e5%bc%b7%e5%88%b6%e7%b5%82%e4%ba%86%e3%81%99%e3%82%8b/</link>
		<comments>http://blog.loadlimits.info/2012/01/windows%e7%89%88%e3%81%aephp5-3%e3%81%8cc0000005%e3%81%a7%e5%bc%b7%e5%88%b6%e7%b5%82%e4%ba%86%e3%81%99%e3%82%8b/#comments</comments>
		<pubDate>Mon, 23 Jan 2012 05:44:13 +0000</pubDate>
		<dc:creator>hotpi</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[解決]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.loadlimits.info/2012/01/windows%e7%89%88%e3%81%aephp5-3%e3%81%8cc0000005%e3%81%a7%e5%bc%b7%e5%88%b6%e7%b5%82%e4%ba%86%e3%81%99%e3%82%8b/</guid>
		<description><![CDATA[Symfony 1.4.16をWindowsのPHP 5.3.9で実行したときに、特定の条件で強制終了する現象に悩まされていました。 主にSymfonyタスクでdoctrine:data-dumpなどを実行するときに落ちていました。 色々調べた結果、Symfonyに問題があるわけではなく、/lib/vendor/symfony/lib/config/sfDefineEnvironmentConfigHandler.class.phpがきっちり4096バイトだったということが原因でした。 つまり、PHP5.3.9では、4096バイトのファイルをrequireもしくはincludeするとc0000005(Access Violation)で強制終了します。CLIに限らず、Apache経由でも同じです。 試しに4096バイトの一切コードが書かれていないテキストファイルを作ってrequireしてみると、再現しました。 強制終了時のウィンドウと、内容は以下のとおり。 ちなみにモジュール名はnts(Non Thread Safe)版ならphp5.dll、ts(Thread Safe)版ならphp5ts.dllです。 どちらも確認しましたが、どちらも同じ現象です。モジュールは入っていても入っていなくても同じです。 問題の署名: &#160; 問題イベント名:&#160;&#160;&#160; APPCRASH &#160; アプリケーション名:&#160;&#160;&#160; php.exe &#160; アプリケーションのバージョン:&#160;&#160;&#160; 5.3.9.0 &#160; アプリケーションのタイムスタンプ:&#160;&#160;&#160; 4f0c5cd0 &#160; 障害モジュールの名前:&#160;&#160;&#160; php5.dll &#160; 障害モジュールのバージョン:&#160;&#160;&#160; 5.3.9.0 &#160; 障害モジュールのタイムスタンプ:&#160;&#160;&#160; 4f0c5dfb &#160; 例外コード:&#160;&#160;&#160; c0000005 &#160; 例外オフセット:&#160;&#160;&#160; 00090f5b &#160; OS バージョン:&#160;&#160;&#160; 6.1.7601.2.1.0.256.48 &#160; ロケール ID:&#160;&#160;&#160; 1041 &#160; 追加情報 1:&#160;&#160;&#160; 0a9e &#160; [...]]]></description>
			<content:encoded><![CDATA[<p>Symfony 1.4.16をWindowsのPHP 5.3.9で実行したときに、特定の条件で強制終了する現象に悩まされていました。   <br />主にSymfonyタスクでdoctrine:data-dumpなどを実行するときに落ちていました。</p>
<p>色々調べた結果、Symfonyに問題があるわけではなく、/lib/vendor/symfony/lib/config/sfDefineEnvironmentConfigHandler.class.phpがきっちり4096バイトだったということが原因でした。</p>
<p>つまり、PHP5.3.9では、4096バイトのファイルをrequireもしくはincludeするとc0000005(Access Violation)で強制終了します。CLIに限らず、Apache経由でも同じです。</p>
<p>試しに4096バイトの一切コードが書かれていないテキストファイルを作ってrequireしてみると、再現しました。</p>
<p>強制終了時のウィンドウと、内容は以下のとおり。   </p>
<p><a href="http://blog.loadlimits.info/wp-content/uploads/2012/01/image.png"><img style="border-bottom: 0px;border-left: 0px;padding-left: 0px;padding-right: 0px;border-top: 0px;border-right: 0px;padding-top: 0px" border="0" alt="image" src="http://blog.loadlimits.info/wp-content/uploads/2012/01/image_thumb.png" width="500" height="252" /></a></p>
<p>ちなみにモジュール名はnts(Non Thread Safe)版ならphp5.dll、ts(Thread Safe)版ならphp5ts.dllです。   <br />どちらも確認しましたが、どちらも同じ現象です。モジュールは入っていても入っていなくても同じです。</p>
<p>問題の署名:   <br />&#160; 問題イベント名:&#160;&#160;&#160; APPCRASH    <br />&#160; アプリケーション名:&#160;&#160;&#160; php.exe    <br />&#160; アプリケーションのバージョン:&#160;&#160;&#160; 5.3.9.0    <br />&#160; アプリケーションのタイムスタンプ:&#160;&#160;&#160; 4f0c5cd0    <br />&#160; 障害モジュールの名前:&#160;&#160;&#160; php5.dll    <br />&#160; 障害モジュールのバージョン:&#160;&#160;&#160; 5.3.9.0    <br />&#160; 障害モジュールのタイムスタンプ:&#160;&#160;&#160; 4f0c5dfb    <br />&#160; 例外コード:&#160;&#160;&#160; c0000005    <br />&#160; 例外オフセット:&#160;&#160;&#160; 00090f5b    <br />&#160; OS バージョン:&#160;&#160;&#160; 6.1.7601.2.1.0.256.48    <br />&#160; ロケール ID:&#160;&#160;&#160; 1041    <br />&#160; 追加情報 1:&#160;&#160;&#160; 0a9e    <br />&#160; 追加情報 2:&#160;&#160;&#160; 0a9e372d3b4ad19135b953a78882e789    <br />&#160; 追加情報 3:&#160;&#160;&#160; 0a9e    <br />&#160; 追加情報 4:&#160;&#160;&#160; 0a9e372d3b4ad19135b953a78882e789</p>
<p>多分現象はこのバグ報告と同じだと思います。   <br /><a href="https://bugs.php.net/bug.php?id=60758" target="_blank">PHP :: Bug #60758 :: require() crashes Apache</a></p>
<p>5.4.0RC5でも解決してないみたいですね。報告とほぼ同じですが、これで再現できます。</p>
<div style="padding-bottom: 0px;margin: 0px;padding-left: 0px;padding-right: 0px;float: none;padding-top: 0px" class="wlWriterEditableSmartContent">
<pre>&lt;?php
file_put_contents('test.txt', str_pad('', 4096));
include('./test.txt');
</pre>
</div>
<p>とりあえず対処法としては改行１文字でも増やしておけばいいってことですか…
  </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.loadlimits.info/2012/01/windows%e7%89%88%e3%81%aephp5-3%e3%81%8cc0000005%e3%81%a7%e5%bc%b7%e5%88%b6%e7%b5%82%e4%ba%86%e3%81%99%e3%82%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Symfonyの機能テストでclickを使わずにmultipartのファイルPOSTをする方法</title>
		<link>http://blog.loadlimits.info/2011/08/symfony%e3%81%ae%e6%a9%9f%e8%83%bd%e3%83%86%e3%82%b9%e3%83%88%e3%81%a7click%e3%82%92%e4%bd%bf%e3%82%8f%e3%81%9a%e3%81%abmultipart%e3%81%ae%e3%83%95%e3%82%a1%e3%82%a4%e3%83%abpost%e3%82%92%e3%81%99/</link>
		<comments>http://blog.loadlimits.info/2011/08/symfony%e3%81%ae%e6%a9%9f%e8%83%bd%e3%83%86%e3%82%b9%e3%83%88%e3%81%a7click%e3%82%92%e4%bd%bf%e3%82%8f%e3%81%9a%e3%81%abmultipart%e3%81%ae%e3%83%95%e3%82%a1%e3%82%a4%e3%83%abpost%e3%82%92%e3%81%99/#comments</comments>
		<pubDate>Tue, 23 Aug 2011 00:49:43 +0000</pubDate>
		<dc:creator>hotpi</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[解決]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://blog.loadlimits.info/2011/08/symfony%e3%81%ae%e6%a9%9f%e8%83%bd%e3%83%86%e3%82%b9%e3%83%88%e3%81%a7click%e3%82%92%e4%bd%bf%e3%82%8f%e3%81%9a%e3%81%abmultipart%e3%81%ae%e3%83%95%e3%82%a1%e3%82%a4%e3%83%abpost%e3%82%92%e3%81%99/</guid>
		<description><![CDATA[Symfony 1.4で実装したAPIのFunctionalテストをする際に、ファイルをPOSTする方法に迷ったので調べました。 ファイルのアップロードテストは、通常のWebサイトであれば、 $browser-&#62; get('/upload')-&#62; click('Upload', array('form' =&#62; array( 'file1' =&#62; sfConfig::get('sf_test_dir').'/datas/test01.jpg', ))) ; みたいに書くのですが、テストしたいアプリケーションはAPIなので、GETするページはありません。 sfBrowserBase::clickを参考にして、こんな感じで実装しました。 まずはテスト本体。test/functional/api/hogeActionsTest.php &#60;?php include(dirname(__FILE__).'/../../bootstrap/functional.php'); $browser = new MyTestFunctional(new myBrowser()); $browser-&#62;loadData(); $browser-&#62; info('JPEGファイルをアップロードできる')-&#62; setUploadFile('file1', sfConfig::get('sf_test_dir').'/datas/test01.jpg')-&#62; post('/upload', array('title' =&#62; 'hoge'))-&#62; with('response')-&#62;begin()-&#62; isStatusCode(200)-&#62; end()-&#62; ; 次にmyBrowserを定義します。lib/test/myBrowser.class.php &#60;?php class myBrowser extends sfBrowser { public function setUploadFile($key, $filename) { if (is_readable($filename)) { $fileError = UPLOAD_ERR_OK; [...]]]></description>
			<content:encoded><![CDATA[<p>Symfony 1.4で実装したAPIのFunctionalテストをする際に、ファイルをPOSTする方法に迷ったので調べました。</p>
<p>ファイルのアップロードテストは、通常のWebサイトであれば、</p>
<div style="padding-bottom: 0px;margin: 0px;padding-left: 0px;padding-right: 0px;float: none;padding-top: 0px" class="wlWriterEditableSmartContent">
<pre>$browser-&gt;
    get('/upload')-&gt;
    click('Upload', array('form' =&gt; array(
        'file1' =&gt; sfConfig::get('sf_test_dir').'/datas/test01.jpg',
    )))
;
</pre>
</div>
<p>みたいに書くのですが、テストしたいアプリケーションはAPIなので、GETするページはありません。</p>
<p>sfBrowserBase::clickを参考にして、こんな感じで実装しました。</p>
<p>まずはテスト本体。test/functional/api/hogeActionsTest.php</p>
<div style="padding-bottom: 0px;margin: 0px;padding-left: 0px;padding-right: 0px;float: none;padding-top: 0px" class="wlWriterEditableSmartContent">
<pre>&lt;?php

include(dirname(__FILE__).'/../../bootstrap/functional.php');

$browser = new MyTestFunctional(new myBrowser());
$browser-&gt;loadData();

$browser-&gt;
    info('JPEGファイルをアップロードできる')-&gt;
    setUploadFile('file1', sfConfig::get('sf_test_dir').'/datas/test01.jpg')-&gt;
    post('/upload', array('title' =&gt; 'hoge'))-&gt;

    with('response')-&gt;begin()-&gt;
        isStatusCode(200)-&gt;
    end()-&gt;
;
</pre>
</div>
<p>次にmyBrowserを定義します。lib/test/myBrowser.class.php</p>
<div style="padding-bottom: 0px;margin: 0px;padding-left: 0px;padding-right: 0px;float: none;padding-top: 0px" class="wlWriterEditableSmartContent">
<pre>&lt;?php

class myBrowser extends sfBrowser
{

    public function setUploadFile($key, $filename)
    {
        if (is_readable($filename))
        {
          $fileError = UPLOAD_ERR_OK;
          $fileSize = filesize($filename);
        }
        else
        {
          $fileError = UPLOAD_ERR_NO_FILE;
          $fileSize = 0;
        }

        $this-&gt;parseArgumentAsArray($key, array(
            'name' =&gt; basename($filename),
            'type' =&gt; '',
            'tmp_name' =&gt; $filename,
            'error' =&gt; $fileError,
            'size' =&gt; $fileSize,
        ),
        $this-&gt;files);
    }

}
</pre>
</div>
<p>sfBrowserBaseクラスのfilesに対して配列でファイルの情報を書き込むと、POST直前に$_FILESに書きこんでくれます。</p>
<p>で、あとはMyでmyBrowser::setUploadFileを呼び出すだけです。lib/test/MyTestFunctional.class.php</p>
<div style="padding-bottom: 0px;margin: 0px;padding-left: 0px;padding-right: 0px;float: none;padding-top: 0px" class="wlWriterEditableSmartContent">
<pre>&lt;?php

class MyTestFunctional extends sfTestFunctional
{
    public function loadData()
    {
        $doctrine = Doctrine_Manager::getInstance()-&gt;getCurrentConnection()-&gt;getDbh();
        $doctrine-&gt;query('SET FOREIGN_KEY_CHECKS = 0');
        $doctrine-&gt;query('TRUNCATE TABLE uploads');
        $doctrine-&gt;query('SET FOREIGN_KEY_CHECKS = 1');
        unset($doctrine);

        Doctrine::loadData(sfConfig::get('sf_test_dir').'/fixtures/');
        return $this;
    }

    public function setUploadFile($key, $filename)
    {
        $this-&gt;browser-&gt;setUploadFile($key, $filename);

        return $this;
    }
}
</pre>
</div>
<p>こうやってsetUploadFile(&#8230;)-&gt;post(&#8230;)と呼び出せばOKです。</p>
<p>sfBrowserBase::callされるたびにfilesの中身はクリアされます。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.loadlimits.info/2011/08/symfony%e3%81%ae%e6%a9%9f%e8%83%bd%e3%83%86%e3%82%b9%e3%83%88%e3%81%a7click%e3%82%92%e4%bd%bf%e3%82%8f%e3%81%9a%e3%81%abmultipart%e3%81%ae%e3%83%95%e3%82%a1%e3%82%a4%e3%83%abpost%e3%82%92%e3%81%99/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>sfFlickrPluginのRequest failed.に対処する</title>
		<link>http://blog.loadlimits.info/2011/06/sfflickrplugin%e3%81%aerequest-failed-%e3%81%ab%e5%af%be%e5%87%a6%e3%81%99%e3%82%8b/</link>
		<comments>http://blog.loadlimits.info/2011/06/sfflickrplugin%e3%81%aerequest-failed-%e3%81%ab%e5%af%be%e5%87%a6%e3%81%99%e3%82%8b/#comments</comments>
		<pubDate>Thu, 23 Jun 2011 10:53:29 +0000</pubDate>
		<dc:creator>hotpi</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[解決]]></category>
		<category><![CDATA[flickr]]></category>
		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://blog.loadlimits.info/2011/06/sfflickrplugin%e3%81%aerequest-failed-%e3%81%ab%e5%af%be%e5%87%a6%e3%81%99%e3%82%8b/</guid>
		<description><![CDATA[symfony 1.4にて、Flickrから画像を取得して使いたかったので、sfFlickrPluginを使ってみました。 sfFlickrPluginのインストール方法はこちらのサイトを参考にチェックアウトできます。 symfonyでFlickrを使用するためのPluginまとめ &#8211; Layer8 Reference 基本的には手動によるセットアップです。 plugins/に展開します。 自分はエクスポートしました。 $ cd plugins/ $ svn export http://svn.symfony-project.com/plugins/sfFlickrPlugin キーに関してはさきほどのサイトを参考に。 あとは config/ProjectConfiguration.class.php に、enablePluginsを追加すればOKです。 public function setup() { $this-&#62;enablePlugins('sfDoctrinePlugin'); $this-&#62;enablePlugins('sfFlickrPlugin'); } で、セットアップ完了。 ここから表題の話。 グループから写真を取得したい場合はgetGroupPhotoListを使います。 が、getGroupPhotoListを実行すると、 Request failed. The requested URL returned error: 413 というエラーで停止。 plugins/sfFlickrPlugin/lib/vendor/Phlickrを最新に差し替えることで解決します。 Phlickrはこちらにあります。 Phlickr &#124; Download Phlickr software for free at SourceForge.net Phlickrの最新版は0.2.8だったので、丸ごと上書きします。 ファイル一式とFramework、TextUiディレクトリも上書き それ以外のディレクトリは調べてないのでわからないですが、まぁ、置いておけば良いのでは。 [...]]]></description>
			<content:encoded><![CDATA[<p>symfony 1.4にて、Flickrから画像を取得して使いたかったので、sfFlickrPluginを使ってみました。</p>
<p>sfFlickrPluginのインストール方法はこちらのサイトを参考にチェックアウトできます。</p>
<p><a href="http://jp.layer8.sh/reference/entry/show/id/606" target="_blank">symfonyでFlickrを使用するためのPluginまとめ &#8211; Layer8 Reference</a></p>
<p>基本的には手動によるセットアップです。   <br />plugins/に展開します。    <br />自分はエクスポートしました。</p>
<div style="padding-bottom: 0px;margin: 0px;padding-left: 0px;padding-right: 0px;float: none;padding-top: 0px" class="wlWriterEditableSmartContent">
<pre>$ cd plugins/
$ svn export http://svn.symfony-project.com/plugins/sfFlickrPlugin</pre>
</div>
<p>キーに関してはさきほどのサイトを参考に。</p>
<p>あとは<br />
  <br />config/ProjectConfiguration.class.php</p>
<p>に、enablePluginsを追加すればOKです。</p>
<div style="padding-bottom: 0px;margin: 0px;padding-left: 0px;padding-right: 0px;float: none;padding-top: 0px" class="wlWriterEditableSmartContent">
<pre>  public function setup()
  {
    $this-&gt;enablePlugins('sfDoctrinePlugin');
    $this-&gt;enablePlugins('sfFlickrPlugin');
  }</pre>
</div>
<p>で、セットアップ完了。</p>
<p>ここから表題の話。</p>
<p>グループから写真を取得したい場合はgetGroupPhotoListを使います。<br />
  <br />が、getGroupPhotoListを実行すると、</p>
<p>Request failed. The requested URL returned error: 413</p>
<p>というエラーで停止。</p>
<p>plugins/sfFlickrPlugin/lib/vendor/Phlickrを最新に差し替えることで解決します。<br />
  <br />Phlickrはこちらにあります。</p>
<p><a href="http://sourceforge.net/projects/phlickr/" target="_blank">Phlickr | Download Phlickr software for free at SourceForge.net</a></p>
<p>Phlickrの最新版は0.2.8だったので、丸ごと上書きします。<br />
  <br />ファイル一式とFramework、TextUiディレクトリも上書き</p>
<p>それ以外のディレクトリは調べてないのでわからないですが、まぁ、置いておけば良いのでは。</p>
<p>Testsは、いらない雰囲気。</p>
<p>これで正常に動くようになりました。<br />
  <br />あと、桁あふれの問題があるので、</p>
<p><a href="http://blog.loadlimits.info/2011/05/phlickr%E3%81%AEbuildimgurl%E3%81%A7photo-id%E3%81%8C%E6%A1%81%E3%81%82%E3%81%B5%E3%82%8C/" target="_blank">PhlickrのbuildImgUrlでPhoto IDが桁あふれ : blog.loadlimit &#8211; digital matter -</a></p>
<p>を参考にして修正してください。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.loadlimits.info/2011/06/sfflickrplugin%e3%81%aerequest-failed-%e3%81%ab%e5%af%be%e5%87%a6%e3%81%99%e3%82%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Symfony 1.4からZendFrameworkでPicasaWebAlbumsにアクセスする</title>
		<link>http://blog.loadlimits.info/2011/06/symfony-1-4%e3%81%8b%e3%82%89zendframework%e3%81%a7picasawebalbums%e3%81%ab%e3%82%a2%e3%82%af%e3%82%bb%e3%82%b9%e3%81%99%e3%82%8b/</link>
		<comments>http://blog.loadlimits.info/2011/06/symfony-1-4%e3%81%8b%e3%82%89zendframework%e3%81%a7picasawebalbums%e3%81%ab%e3%82%a2%e3%82%af%e3%82%bb%e3%82%b9%e3%81%99%e3%82%8b/#comments</comments>
		<pubDate>Sun, 05 Jun 2011 12:58:37 +0000</pubDate>
		<dc:creator>hotpi</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Picasa]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[ZendFramework]]></category>

		<guid isPermaLink="false">http://blog.loadlimits.info/2011/06/symfony-1-4%e3%81%8b%e3%82%89zendframework%e3%81%a7picasawebalbums%e3%81%ab%e3%82%a2%e3%82%af%e3%82%bb%e3%82%b9%e3%81%99%e3%82%8b/</guid>
		<description><![CDATA[symfony-projectのページがGoogle検索に引っかかりにくい（引っかかってもバージョン違ったりする）ので色々キーワード入れてメモ。 ZendFrameworkをSymfonyに導入する方法は以下のJobeetの17日目に書いてありました。 Practical symfony &#124; 17日目: 検索 &#124; symfony &#124; Web PHP Framework cd lib/vendor/ wget http://framework.zend.com/releases/ZendFramework-1.11.7/ZendFramework-1.11.7.zip unzip ZendFramework-1.11.7.zip mv ZendFramework-1.11.7/library/Zend/ . とりあえずlib/vendorに入れておきました。 あとはconfig/ProjectConfiguration.class.phpに上記ページのコードを貼りつけて、使う直前にProjectConfiguration::registerZend();してやればOK。 Picasaの方は Zend Framework: Documentation: Picasa Web Albums の使用法 &#8211; Zend Framework Manual このページを参考にしてできます。 丸投げだけど日本語だしわかりやすいので特に解説も不要かな、と…]]></description>
			<content:encoded><![CDATA[<p>symfony-projectのページがGoogle検索に引っかかりにくい（引っかかってもバージョン違ったりする）ので色々キーワード入れてメモ。</p>
<p>ZendFrameworkをSymfonyに導入する方法は以下のJobeetの17日目に書いてありました。</p>
<p><a href="http://www.symfony-project.org/jobeet/1_4/Doctrine/ja/17" target="_blank">Practical symfony | 17日目: 検索 | symfony | Web PHP Framework</a></p>
<div style="padding-bottom: 0px;margin: 0px;padding-left: 0px;padding-right: 0px;float: none;padding-top: 0px" class="wlWriterEditableSmartContent">
<pre>cd lib/vendor/
wget http://framework.zend.com/releases/ZendFramework-1.11.7/ZendFramework-1.11.7.zip
unzip ZendFramework-1.11.7.zip
mv ZendFramework-1.11.7/library/Zend/ .
</pre>
</div>
<p>とりあえずlib/vendorに入れておきました。</p>
<p>あとはconfig/ProjectConfiguration.class.phpに上記ページのコードを貼りつけて、使う直前にProjectConfiguration::registerZend();してやればOK。</p>
<p>Picasaの方は</p>
<p><a href="http://zendframework.com/manual/ja/zend.gdata.photos.html" target="_blank">Zend Framework: Documentation: Picasa Web Albums の使用法 &#8211; Zend Framework Manual</a></p>
<p>このページを参考にしてできます。</p>
<p>丸投げだけど日本語だしわかりやすいので特に解説も不要かな、と…</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.loadlimits.info/2011/06/symfony-1-4%e3%81%8b%e3%82%89zendframework%e3%81%a7picasawebalbums%e3%81%ab%e3%82%a2%e3%82%af%e3%82%bb%e3%82%b9%e3%81%99%e3%82%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHPでFlickrからPhlickrを使ってグループ検索</title>
		<link>http://blog.loadlimits.info/2011/05/php%e3%81%a7flickr%e3%81%8b%e3%82%89phlickr%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%82%b0%e3%83%ab%e3%83%bc%e3%83%97%e6%a4%9c%e7%b4%a2/</link>
		<comments>http://blog.loadlimits.info/2011/05/php%e3%81%a7flickr%e3%81%8b%e3%82%89phlickr%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%82%b0%e3%83%ab%e3%83%bc%e3%83%97%e6%a4%9c%e7%b4%a2/#comments</comments>
		<pubDate>Mon, 30 May 2011 11:59:18 +0000</pubDate>
		<dc:creator>hotpi</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[flickr]]></category>
		<category><![CDATA[Phlickr]]></category>

		<guid isPermaLink="false">http://blog.loadlimits.info/2011/05/php%e3%81%a7flickr%e3%81%8b%e3%82%89phlickr%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%82%b0%e3%83%ab%e3%83%bc%e3%83%97%e6%a4%9c%e7%b4%a2/</guid>
		<description><![CDATA[Phlickrを使って、グループIDとライセンス指定で写真を検索してくる方法です。 $api = new Phlickr_Api(API_KEY, API_SECRET); $request = $api-&#62;createRequest('flickr.photos.search', array( 'group_id' =&#62; GROUP_ID, // グループID 'license' =&#62; '4,5,6', // ライセンス設定(商用利用可) )); $photoList = new Phlickr_PhotoList($request, 500); // １ページ500件 $pageCount = $photoList-&#62;getPageCount(); for ($i = 1 ; $i &#60; $pageCount ; $i++) { $photos = $photoList-&#62;getPhotosFromPage($i); foreach ($photos as $photo) { // something nice } }]]></description>
			<content:encoded><![CDATA[<p>Phlickrを使って、グループIDとライセンス指定で写真を検索してくる方法です。</p>
<p>
<div style="padding-bottom: 0px;margin: 0px;padding-left: 0px;padding-right: 0px;float: none;padding-top: 0px" class="wlWriterEditableSmartContent">
<pre>$api = new Phlickr_Api(API_KEY, API_SECRET);

$request = $api-&gt;createRequest('flickr.photos.search', array(
    'group_id' =&gt; GROUP_ID, // グループID
    'license' =&gt; '4,5,6', // ライセンス設定(商用利用可)
));
$photoList = new Phlickr_PhotoList($request, 500); // １ページ500件

$pageCount = $photoList-&gt;getPageCount();
for ($i = 1 ; $i &lt; $pageCount ; $i++) {
    $photos = $photoList-&gt;getPhotosFromPage($i);
    foreach ($photos as $photo) {
        // something nice
    }
}
</pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.loadlimits.info/2011/05/php%e3%81%a7flickr%e3%81%8b%e3%82%89phlickr%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%82%b0%e3%83%ab%e3%83%bc%e3%83%97%e6%a4%9c%e7%b4%a2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PhlickrのbuildImgUrlでPhoto IDが桁あふれ</title>
		<link>http://blog.loadlimits.info/2011/05/phlickr%e3%81%aebuildimgurl%e3%81%a7photo-id%e3%81%8c%e6%a1%81%e3%81%82%e3%81%b5%e3%82%8c/</link>
		<comments>http://blog.loadlimits.info/2011/05/phlickr%e3%81%aebuildimgurl%e3%81%a7photo-id%e3%81%8c%e6%a1%81%e3%81%82%e3%81%b5%e3%82%8c/#comments</comments>
		<pubDate>Mon, 30 May 2011 04:34:10 +0000</pubDate>
		<dc:creator>hotpi</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[解決]]></category>
		<category><![CDATA[flickr]]></category>
		<category><![CDATA[Phlickr]]></category>

		<guid isPermaLink="false">http://blog.loadlimits.info/2011/05/phlickr%e3%81%aebuildimgurl%e3%81%a7photo-id%e3%81%8c%e6%a1%81%e3%81%82%e3%81%b5%e3%82%8c/</guid>
		<description><![CDATA[PHPでFlickrを簡単に扱えるPhlickrを使っているのですが、Phlickr_PhotoクラスのbuildImgUrlで取得した画像のURLにアクセスしたら、「This photo is currently unavailable」の文字。 URL中のPhoto IDの入る箇所が2147483647(0x7FFFFFFF)になっていました。 ということでPhoto.phpを修正。551行目。 $url = sprintf("http://farm%d.static.flickr.com/%d/%d_%s%s.%s", $this-&#62;getFarm(), $this-&#62;getServer(), $this-&#62;getId(), $this-&#62;getSecret(), $sizeStr, $type); ３番目の%dを%sに。 $url = sprintf("http://farm%d.static.flickr.com/%d/%s_%s%s.%s", $this-&#62;getFarm(), $this-&#62;getServer(), $this-&#62;getId(), $this-&#62;getSecret(), $sizeStr, $type); これで解決。]]></description>
			<content:encoded><![CDATA[<p>PHPでFlickrを簡単に扱える<a href="http://sourceforge.net/projects/phlickr/" target="_blank">Phlickr</a>を使っているのですが、Phlickr_PhotoクラスのbuildImgUrlで取得した画像のURLにアクセスしたら、「This photo is currently unavailable」の文字。</p>
<p>URL中のPhoto IDの入る箇所が2147483647(0x7FFFFFFF)になっていました。</p>
<p>ということでPhoto.phpを修正。551行目。</p>
<p>
<div style="padding-bottom: 0px;margin: 0px;padding-left: 0px;padding-right: 0px;float: none;padding-top: 0px" class="wlWriterEditableSmartContent">
<pre>        $url = sprintf("http://farm%d.static.flickr.com/%d/%d_%s%s.%s",
            $this-&gt;getFarm(), $this-&gt;getServer(), $this-&gt;getId(), $this-&gt;getSecret(), $sizeStr, $type);
</pre>
</div>
<p>３番目の%dを%sに。</p>
<p><div style="padding-bottom: 0px;margin: 0px;padding-left: 0px;padding-right: 0px;float: none;padding-top: 0px" class="wlWriterEditableSmartContent">
<pre>        $url = sprintf("http://farm%d.static.flickr.com/%d/%s_%s%s.%s",
            $this-&gt;getFarm(), $this-&gt;getServer(), $this-&gt;getId(), $this-&gt;getSecret(), $sizeStr, $type);
</pre>
</div>
<p>これで解決。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.loadlimits.info/2011/05/phlickr%e3%81%aebuildimgurl%e3%81%a7photo-id%e3%81%8c%e6%a1%81%e3%81%82%e3%81%b5%e3%82%8c/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Symfonyでembed18nを使う</title>
		<link>http://blog.loadlimits.info/2011/04/symfony%e3%81%a7embed18n%e3%82%92%e4%bd%bf%e3%81%86/</link>
		<comments>http://blog.loadlimits.info/2011/04/symfony%e3%81%a7embed18n%e3%82%92%e4%bd%bf%e3%81%86/#comments</comments>
		<pubDate>Sun, 10 Apr 2011 15:30:09 +0000</pubDate>
		<dc:creator>hotpi</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[解決]]></category>
		<category><![CDATA[doctrine]]></category>
		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://blog.loadlimits.info/2011/04/symfony%e3%81%a7embed18n%e3%82%92%e4%bd%bf%e3%81%86/</guid>
		<description><![CDATA[Symfonyで多言語対応する予定があるけど、とりあえず日本語だけ使いたかったときのメモです。embedI18nを自在に使う参考に。例によってSymfony 1.4+Doctrine。 // HogeForm.class.php public HogeForm extends BaseHogeForm { public function configure() { parent::configure(); $this-&#62;embedI18n(array('ja')); // 二次元配列でembedしたフォームにアクセスできる $this-&#62;validatorSchema['ja']['name']-&#62;setOption('required', true); $this-&#62;useFields(array('ja', 'foo', 'bar')); } } このままテンプレートで$form-&#62;render()とかしてしまうと、入れ子表示になってしまうのでrenderRowでそれぞれ表示するようにしてやれば、useFieldsでembedされたフォームの順番がいじれないという問題も解決。 // hogeCreateSuccess.php $form['ja']['name']-&#62;renderRow(); $form['foo']-&#62;renderRow(); $form['bar']-&#62;renderRow(); ちなみにsfFormDoctrine::getI18nFormClass()とかあるのですが、クラス名が取れるだけです。 追記 SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry &#8217;19-ja&#8217; for key &#8216;PRIMARY&#8217; フォームをsaveしたら上記のエラーが出ました。 updateObject後にobject-&#62;toArray()をすると見覚えのない、「ja_JP」というキーが。 Array ( [id] =&#62; [foo] =&#62; hoge [bar] =&#62; moge [...]]]></description>
			<content:encoded><![CDATA[<p>Symfonyで多言語対応する予定があるけど、とりあえず日本語だけ使いたかったときのメモです。embedI18nを自在に使う参考に。例によってSymfony 1.4+Doctrine。</p>
<div style="padding-bottom: 0px;margin: 0px;padding-left: 0px;padding-right: 0px;float: none;padding-top: 0px" class="wlWriterEditableSmartContent">
<pre>// HogeForm.class.php
public HogeForm extends BaseHogeForm
{

    public function configure()
    {
        parent::configure();

        $this-&gt;embedI18n(array('ja'));

        // 二次元配列でembedしたフォームにアクセスできる
        $this-&gt;validatorSchema['ja']['name']-&gt;setOption('required', true);

        $this-&gt;useFields(array('ja', 'foo', 'bar'));
    }

}
</pre>
</div>
<p>このままテンプレートで$form-&gt;render()とかしてしまうと、入れ子表示になってしまうのでrenderRowでそれぞれ表示するようにしてやれば、useFieldsでembedされたフォームの順番がいじれないという問題も解決。</p>
<div style="padding-bottom: 0px;margin: 0px;padding-left: 0px;padding-right: 0px;float: none;padding-top: 0px" class="wlWriterEditableSmartContent">
<pre>// hogeCreateSuccess.php
$form['ja']['name']-&gt;renderRow();
$form['foo']-&gt;renderRow();
$form['bar']-&gt;renderRow();
</pre>
</div>
<p>ちなみにsfFormDoctrine::getI18nFormClass()とかあるのですが、クラス名が取れるだけです。</p>
<h3>追記</h3>
<blockquote>
<p>SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry &#8217;19-ja&#8217; for key &#8216;PRIMARY&#8217;</p>
</blockquote>
<p>フォームをsaveしたら上記のエラーが出ました。</p>
<p>updateObject後にobject-&gt;toArray()をすると見覚えのない、「ja_JP」というキーが。</p>
<div style="padding-bottom: 0px;margin: 0px;padding-left: 0px;padding-right: 0px;float: none;padding-top: 0px" class="wlWriterEditableSmartContent">
<pre>Array
(
    [id] =&gt;
    [foo] =&gt; hoge
    [bar] =&gt; moge
    [Translation] =&gt; Array
        (
            [ja] =&gt; Array
                (
                    [id] =&gt;
                    [name] =&gt; someone
                    [lang] =&gt; ja
                )
            [ja_JP] =&gt; Array
                (
                    [id] =&gt;
                    [name] =&gt;
                    [lang] =&gt; ja_JP
                )
        )
)
</pre>
</div>
<p>色々調べた結果、原因は</p>
<ul>
<li>langがchar(2)なので、jaとja_JPの区別がつかないこと</li>
<li>sfDoctrineRecord::getDefaultCulture()がja_JPなこと</li>
</ul>
<p>恐らく、<br />
  <br /><a href="http://www.symfony-project.org/jobeet/1_4/Doctrine/ja/19">http://www.symfony-project.org/jobeet/1_4/Doctrine/ja/19</a></p>
<p>このページを参考にしているとハマるのではないかと…</p>
<p>ちなみにlangがchar(2)なのは、Doctrine_I18nの中で定義されています。</p>
<p>対策として考えられるのは以下のパターン。</p>
<ul>
<li>sfDoctrineRecord::setDefaultCulture(&#8216;ja&#8217;)をコールする</li>
<li>langをchar(5)にしてja_JPの形式で扱う</li>
<li>settings.ymlのdefault_cultureをjaにする</li>
<li>embedI18nにja_JPを渡す</li>
</ul>
<p>sfDoctrineRecordのカルチャをセットするのは、sfUserのカルチャをセットすることでイベントが駆動して同時にセットできます。なので、$this-&gt;getUser()-&gt;setCulture(‘ja’)とかしておけばOK。</p>
<p>langをchar(5)にするのは、I18nビヘイビアのオプションにlength:5を指定すればできます。この場合、カルチャをすべて５文字で扱うようにしないとlangがマッチしなくなります。length:2の場合は暗黙的に先頭２文字だけにマッチさせることで５文字のカルチャを許容していたので。</p>
<div style="padding-bottom: 0px;margin: 0px;padding-left: 0px;padding-right: 0px;float: none;padding-top: 0px" class="wlWriterEditableSmartContent">
<pre># schema.yml
Sample:
  actAs:
    Timestampable: ~
    I18n:
      fields: [name]
      length: 5
</pre>
</div>
<p>settings.ymlのdefault_cultureをjaにするのが一番簡単です。en_USとen_GBはどうするんだという話ですけど…</p>
<p>formクラスに$this-&gt;embedI18n(array(‘ja_JP’))とすることでも対応できます。</p>
<p>気になる方はsfDoctrineRecordI18nFilterクラスのfilterSet関数を見てください。</p>
<p>カタログファイルとかにも影響しそうなのでsettings.ymlに２文字カルチャをセットするのがベターかなぁ。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.loadlimits.info/2011/04/symfony%e3%81%a7embed18n%e3%82%92%e4%bd%bf%e3%81%86/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>html5uploaderで複数アップロード時のバグ修正</title>
		<link>http://blog.loadlimits.info/2011/03/html5uploader%e3%81%a7%e8%a4%87%e6%95%b0%e3%82%a2%e3%83%83%e3%83%97%e3%83%ad%e3%83%bc%e3%83%89%e6%99%82%e3%81%ae%e3%83%90%e3%82%b0%e4%bf%ae%e6%ad%a3/</link>
		<comments>http://blog.loadlimits.info/2011/03/html5uploader%e3%81%a7%e8%a4%87%e6%95%b0%e3%82%a2%e3%83%83%e3%83%97%e3%83%ad%e3%83%bc%e3%83%89%e6%99%82%e3%81%ae%e3%83%90%e3%82%b0%e4%bf%ae%e6%ad%a3/#comments</comments>
		<pubDate>Sat, 05 Mar 2011 08:05:20 +0000</pubDate>
		<dc:creator>hotpi</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[解決]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.loadlimits.info/2011/03/html5uploader%e3%81%a7%e8%a4%87%e6%95%b0%e3%82%a2%e3%83%83%e3%83%97%e3%83%ad%e3%83%bc%e3%83%89%e6%99%82%e3%81%ae%e3%83%90%e3%82%b0%e4%bf%ae%e6%ad%a3/</guid>
		<description><![CDATA[Gmailのようなドラッグアンドドロップでファイルをアップロードする機能が使いたかったので探していたところ、見つけたのがhtml5uploaderです。JSと、サーバーサイドのPHPが付いてます。 html5uploader デモ http://www.weeby.pl/blog/html5uploader/uploader.html 比較的簡単な構造で最低限のアップロード機能を実装しているので、elFinderと組み合わせて使うことにしました。 で、表題のバグですが、複数のファイルを同時にアップロードすることはできるのですが、時々サーバからNo file to uploadというメッセージが返ってくることがあります。リクエストを見ると、送るはずのContent-Lengthが0バイトで、データを送信していないようです。 原因はonloadendイベントの関数でreaderオブジェクトを直接呼び出して使ってるからですね。というわけで修正。 // Once the process of reading file this.loadEnd = function() { bin = reader.result; を // Once the process of reading file this.loadEnd = function() { bin = event.target.result; に修正して完了です。 Pluploadの方が高性能かつソースもきれいでよく出来てるのですが、GPLなんですよね。コマーシャルライセンスは10ユーロなんで良心的で安いんですが。今回はファイルマネージャーに統合しちゃいたかったので、小型のhtml5uploaderにしてみました。 elFinderがDnDのアップロードに対応しないかなぁ。]]></description>
			<content:encoded><![CDATA[<p>Gmailのようなドラッグアンドドロップでファイルをアップロードする機能が使いたかったので探していたところ、見つけたのがhtml5uploaderです。JSと、サーバーサイドのPHPが付いてます。</p>
<p><a href="http://code.google.com/p/html5uploader/" target="_blank">html5uploader</a></p>
<p>デモ   <br /><a title="http://www.weeby.pl/blog/html5uploader/uploader.html" href="http://www.weeby.pl/blog/html5uploader/uploader.html">http://www.weeby.pl/blog/html5uploader/uploader.html</a></p>
<p>比較的簡単な構造で最低限のアップロード機能を実装しているので、<a href="http://elrte.org/jp/elfinder/" target="_blank">elFinder</a>と組み合わせて使うことにしました。</p>
<p>で、表題のバグですが、複数のファイルを同時にアップロードすることはできるのですが、時々サーバからNo file to uploadというメッセージが返ってくることがあります。リクエストを見ると、送るはずのContent-Lengthが0バイトで、データを送信していないようです。</p>
<p>原因はonloadendイベントの関数でreaderオブジェクトを直接呼び出して使ってるからですね。というわけで修正。</p>
<div style="padding-bottom: 0px;margin: 0px;padding-left: 0px;padding-right: 0px;float: none;padding-top: 0px" class="wlWriterEditableSmartContent">
<pre>// Once the process of reading file
this.loadEnd = function() {
	bin = reader.result;
</pre>
</div>
<p>を</p>
<div style="padding-bottom: 0px;margin: 0px;padding-left: 0px;padding-right: 0px;float: none;padding-top: 0px" class="wlWriterEditableSmartContent">
<pre>// Once the process of reading file
this.loadEnd = function() {
	bin = event.target.result;
</pre>
</div>
<p>に修正して完了です。</p>
<p><a href="http://www.plupload.com/" target="_blank">Plupload</a>の方が高性能かつソースもきれいでよく出来てるのですが、GPLなんですよね。コマーシャルライセンスは10ユーロなんで良心的で安いんですが。今回はファイルマネージャーに統合しちゃいたかったので、小型のhtml5uploaderにしてみました。</p>
<p>elFinderがDnDのアップロードに対応しないかなぁ。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.loadlimits.info/2011/03/html5uploader%e3%81%a7%e8%a4%87%e6%95%b0%e3%82%a2%e3%83%83%e3%83%97%e3%83%ad%e3%83%bc%e3%83%89%e6%99%82%e3%81%ae%e3%83%90%e3%82%b0%e4%bf%ae%e6%ad%a3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>symfonyで行の並び順を指定できるビヘイビアを使ってみた</title>
		<link>http://blog.loadlimits.info/2011/02/symfony%e3%81%a7%e8%a1%8c%e3%81%ae%e4%b8%a6%e3%81%b3%e9%a0%86%e3%82%92%e6%8c%87%e5%ae%9a%e3%81%a7%e3%81%8d%e3%82%8b%e3%83%93%e3%83%98%e3%82%a4%e3%83%93%e3%82%a2%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6/</link>
		<comments>http://blog.loadlimits.info/2011/02/symfony%e3%81%a7%e8%a1%8c%e3%81%ae%e4%b8%a6%e3%81%b3%e9%a0%86%e3%82%92%e6%8c%87%e5%ae%9a%e3%81%a7%e3%81%8d%e3%82%8b%e3%83%93%e3%83%98%e3%82%a4%e3%83%93%e3%82%a2%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6/#comments</comments>
		<pubDate>Mon, 21 Feb 2011 01:19:04 +0000</pubDate>
		<dc:creator>hotpi</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[doctrine]]></category>
		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://blog.loadlimits.info/2011/02/symfony%e3%81%a7%e8%a1%8c%e3%81%ae%e4%b8%a6%e3%81%b3%e9%a0%86%e3%82%92%e6%8c%87%e5%ae%9a%e3%81%a7%e3%81%8d%e3%82%8b%e3%83%93%e3%83%98%e3%82%a4%e3%83%93%e3%82%a2%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6/</guid>
		<description><![CDATA[今回はこちらを参考に、csDoctrineActAsSortablePluginを使ってみました。 $ ./symfony plugin:install csDoctrineActAsSortablePlugin &#62;&#62; plugin installing plugin "csDoctrineActAsSortablePlugin" &#62;&#62; sfPearFrontendPlugin downloading csDoctrineActAsSortablePlugin-1.5.1.tgz ... &#62;&#62; sfPearFrontendPlugin Starting to download csDoctrineActAsSortablePlugin-1.5.1.tgz &#62;&#62; sfPearFrontendPlugin (6,795 bytes) &#62;&#62; sfPearFrontendPlugin . &#62;&#62; sfPearFrontendPlugin . &#62;&#62; sfPearFrontendPlugin ...done: 6,795 bytes &#62;&#62; sfSymfonyPluginManager Installation successful for plugin "csDoctrineActAsSortablePlugin" &#62;&#62; sfSymfonyPluginManager Installing web data for plugin 使い方はschema.ymlのモデルのActAsにSortableを追加してやればいいだけです。 ModelName: actAs: Timestampable: ~ [...]]]></description>
			<content:encoded><![CDATA[<p>今回は<a href="http://d.hatena.ne.jp/innx_hidenori/20100107/1262850227" target="_blank">こちら</a>を参考に、csDoctrineActAsSortablePluginを使ってみました。</p>
<div style="padding-bottom: 0px;margin: 0px;padding-left: 0px;padding-right: 0px;float: none;padding-top: 0px" class="wlWriterEditableSmartContent">
<pre>$ ./symfony plugin:install csDoctrineActAsSortablePlugin
&gt;&gt; plugin    installing plugin "csDoctrineActAsSortablePlugin"
&gt;&gt; sfPearFrontendPlugin downloading csDoctrineActAsSortablePlugin-1.5.1.tgz ...
&gt;&gt; sfPearFrontendPlugin Starting to download csDoctrineActAsSortablePlugin-1.5.1.tgz
&gt;&gt; sfPearFrontendPlugin (6,795 bytes)
&gt;&gt; sfPearFrontendPlugin .
&gt;&gt; sfPearFrontendPlugin .
&gt;&gt; sfPearFrontendPlugin ...done: 6,795 bytes
&gt;&gt; sfSymfonyPluginManager Installation successful for plugin "csDoctrineActAsSortablePlugin"
&gt;&gt; sfSymfonyPluginManager Installing web data for plugin</pre>
</div>
<p>使い方はschema.ymlのモデルのActAsにSortableを追加してやればいいだけです。</p>
<div style="padding-bottom: 0px;margin: 0px;padding-left: 0px;padding-right: 0px;float: none;padding-top: 0px" class="wlWriterEditableSmartContent">
<pre>ModelName:
  actAs:
    Timestampable: ~
    Sortable: ~</pre>
</div>
<p>これで、自動的にpositionというbigintのカラムが生成されて、ソート順が数字で指定できるようになります。</p>
<p>併せて順序を入れ替えるための便利なメソッドが使えるようになります。<br />
  <br /><a href="http://www.symfony-project.org/plugins/csDoctrineActAsSortablePlugin/1_5_1?tab=plugin_readme" target="_blank">http://www.symfony-project.org/plugins/csDoctrineActAsSortablePlugin/1_5_1?tab=plugin_readme</a></p>
<p>今回、I18nの下にSortableを置いたら、インデックス名がやたら長くなってしまい、CREATE文でエラーが出るようになってしまいました。</p>
<div style="padding-bottom: 0px;margin: 0px;padding-left: 0px;padding-right: 0px;float: none;padding-top: 0px" class="wlWriterEditableSmartContent">
<pre>SQLSTATE[42000]: Syntax error or access violation: 1059 Identifier name '******_*********_***_*******_******_*****_translation_position_sortable_idx' is too long.</pre>
</div>
<p>plugins/csDoctrineActAsSortablePlugin/lib/template/Sortable.php</p>
<p><div style="padding-bottom: 0px;margin: 0px;padding-left: 0px;padding-right: 0px;float: none;padding-top: 0px" class="wlWriterEditableSmartContent">
<pre>  protected function getSortableIndexName()
  {
    return sprintf('%s_%s_%s', $this-&gt;getTable()-&gt;getTableName(), $this-&gt;_options['name'], $this-&gt;_options['indexName']);
  }</pre>
</div>
<p>ということなので、nameとindexNameを指定して短くできそうです。<br />
  <br />と言ってもposition_sortable分しか短くできないのですけど。</p>
<p>最終的には、schema.ymlの方でtableNameをdatabase_name.table_nameで指定していたのですが、これをtableName: table_nameにするだけで対応できました。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.loadlimits.info/2011/02/symfony%e3%81%a7%e8%a1%8c%e3%81%ae%e4%b8%a6%e3%81%b3%e9%a0%86%e3%82%92%e6%8c%87%e5%ae%9a%e3%81%a7%e3%81%8d%e3%82%8b%e3%83%93%e3%83%98%e3%82%a4%e3%83%93%e3%82%a2%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

