PHPはOKですが、JavaScriptはNGです。
そもそも何のためにmeta要素で文字コードを指定するのかというと、ブラウザがHTMLを解釈して表示する際、文字化けしないようにするためです。
PHPを実行するのはサーバーですから、ブラウザからすると、素のHTMLがそのまま送られてくることと、PHPで処理されたHTMLが送られてくることに特に違いは無く、原則として区別も付きません。
ですから、PHPで何らかの文字列をHTMLに出力するような場合は別として、例えばheaderのような処理は、最終的なHTMLに反映されるものではないので、問題ありません。
(なお、PHPのheaderはHTMLの途中ではできないので、むしろ前に置くことが必須です。)
一方、WebページにおけるJavaScriptは、HTMLに埋め込まれたものをブラウザが解釈し、実行します。
その際、HTMLではscript要素またはon~属性を使いますが、これらのものはhead要素またはbody要素の外に出てくることはできないので、当然、DOCTYPE宣言より前に置くこともできません。
なお、文字コード指定のためのmeta要素に関するルールは、
The element containing the character encoding declaration must be serialized completely within the first 1024 bytes of the document.
4.2 Document metadata — HTML5
https://www.w3.org/TR/html5/document-metadata.html
現在ではこのように「先頭から1024バイト以内」となっています。
細かい点ですが、DOCTYPE宣言の「!」が欠けていますので、ご注意ください。
× <DOCTYPE html>
○ <!DOCTYPE html>