Many developers use strpos for micro optimization purposes.
Using strstr also only works if the resulting string cannot be interpreted as false in boolean context.
Overcome by events: PHP8 introduced str_contains, the "right tool for the job" (with shims available for older setups). Which does exactly what everyone has been glamoring for, but without the interpreter-level comparison and syntactic overhead.
Here are some other answers (+benchmarks) I got to my question, which is almost the same (I didn't realize yours when asking).
In the meantime I also made my own benchmark test, which I ran 1000000 times for each relevant functions (strstr(), strpos(), stristr() and stripos()).
Here's the code:
This means it can really depend on "environmental circumstances", which are sometimes hard to influence, and can change the result of "micro optimization tasks" like this, in case you are just checking whether a string exists in another one or not.
BUT I think in most cases, strpos() is the winner in comparison to strstr().