顯示具有 php 標籤的文章。 顯示所有文章
顯示具有 php 標籤的文章。 顯示所有文章

星期六, 9月 09, 2017

wordpress 出現 Invalid post type 錯誤

今天進 wordpress ,選 All posts 後,就出現 Invalid post type. 的錯誤。先試著開啟 wordpress wp-admin/edit.php 看,發現一開始的檢查 $typenow 就導致錯誤 了,$typenow 是空的。
根據程式碼,試著在網址列加上 ?post_type=post ,能進入 All posts 了,但文章列表是空的。
  1. 上網找了一些文章,說是要移除 plugin ,但我試著移除了,沒有用。
  2. 對照目前的程式碼跟網路下載的 wordpress 4.8 程式碼,也幾乎是一樣的。
  3. 試著直接連線到資料庫看,資料表格一切正常,權限也都是正確的。
  4. 直接在 wp-config.php 裡加入
    define('WP_DEBUG', true);
    define('WP_DEBUG_DISPLAY', false);
    define('WP_DEBUG_LOG', true);
    
    ,然後看 wp-content/debug.log ,終於找到一點蛛絲馬跡。
看來是因為 wp-include/vars.php 有問題,裏面用 preg_match 檢查 _SERVER['PHP_SELF'] 時,因為 match 不到而出錯,猜想這可能連到影響到後續的 $typenow 有問題。根據這個線索去推敲,PHP 應該沒問題,察看了 php-fpm 的設定,也沒問題。後來找到這篇:php - Wrong SCRIPT_FILENAME in Apache 2.4.26 - Stack Overflow,再循線看到這篇:php - Wrong SCRIPT_FILENAME in Apache 2.4.26 - Stack Overflow才知道可能是 Apache 問題,察看了 pacman 的 log,果然前幾天有更新,但是因為沒有重新啟動,所以都沒發現問題。在設定裡補上
ProxyFCGIBackendType GENERIC
以後,重新啟動 Apache 就沒問題了。

星期三, 9月 09, 2015

Laravel 5 測試用的資料庫設定

參考這篇來做:How to specify a testing database in Laravel 5?
有打勾的 Best answer 就是了,主要修改部份有兩個,第一個是在 config/database.php 裡,這裡添加給測試環境用的資料庫設定;第二個是在基礎的 TestCase 類別裡,去放置給測試環境用的環境變數。
原 理是這樣的,因為 Laravel 應用程式在啟動時,會根據環境變數或是 .env 來決定要啟用哪組資料庫設定,這部份可以在 .env 與 config/database.php 裡看到。所以就可以這樣動手腳來切換,避免 production 與 testing 的資料庫混用。
文 章裡有一點是比較不建議的作法,這是我在 Two scoops of Django 這本書上看到的,就是 testing 與 production 的資料庫要一致,不要 production 用 mysql,testing 又用 sqlite 這樣子。畢竟在實際應用時,資料庫的不同仍有可能造成測試結果的不同,那就會導致測試時都沒問題,正式上線時卻出包的情況。
我這邊照著改的時候,有失敗的情況,仔細檢查以後,發現文章裡是用 DB_DEFAULT,而用 Laravel 產生出來的專案框架裡是用 DB_CONNECTION,這邊調整一下就沒有問題了,我猜想可能是 Laravel 版本的關係。

星期二, 4月 08, 2014

PHP Cannot create references to/from string offsets

之前在自家的 wordpress 上用了 muki-tag-cloud ,在翻 apache log 時,發現常會出現這錯誤:
PHP Fatal error: Cannot create references to/from string offsets nor overloaded objects in wp-content/plugins/muki-tag-cloud/widget.php on line 230
今天發狠找出原因了,首先還是要先瞭解 PHP 的 reference 是幹嘛的,我覺得這篇 PHP Reference 測試 不錯,裡面沒什麼解說,就是幾個範例與執行結果,看完大概可以了解到 PHP 的 reference 的行為是什麼。
接著就是試著寫小程式複製出錯誤。
可以複製出來之後,就知道問題在哪裡了 (好吧,我知道 log 的訊息其實很清楚,但我對 PHP 不熟,所以...),PHP 不允許建立字串中字元的參考。知道問題了,就可以解決了,後來就簡單加上判斷,如果發現 $widget['callback'] 是字串的話,就跳過,不建立 $widget['callback'][0] 的參考,如此一來就解決問題了。
順手發了 pull request 給作者,希望是會改,要不然每次更新這 plugin 時,都要再改一次。

星期三, 12月 12, 2012

升級 wordpress 到 3.5,Update network 出現 SSL certificate problem

升級 3.5 以後,要 Update network,卻發現下面這個錯誤。
Warning! Problem upgrading http://domain.tld/blogs/blogname/. Your server may not be able to connect to blogs running on it. Error message: SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
是沒錯,因為是自家用的網站,CA cert 是自己簽發的,會有驗證有問題的情況是正常。但為什麼之前都沒有這問題,怪。總之,後來查了好一會,知道應該是跟 sslverify 有關係,就找到 wp-admin/network/upgrade.php 裡呼叫 wp_remote_get 的地方,為第二個參數加上 sslverify => false 就可以了。
$response = wp_remote_get( $upgrade_url, array( 'timeout' => 120, 'httpversion' => '1.1', 'sslverify' => false ) )
參考資料: